1. 程式人生 > 實用技巧 >python 類方法和靜態方法

python 類方法和靜態方法

#:靜態方法:在呼叫類的時候就會自動執行

#:類方法:在呼叫的時候才會執行

class Person:
#:類屬性
name = "jack"
def __init__(self,name):
self.name = name

def tell(self):
print(self.name)

@staticmethod
#:staticmethod 傳入的是類中的屬性
def talk():
print(Person.name) #:直接呼叫"Person類" 所以呼叫的是類的屬性

@classmethod #:原理跟staticmethod一樣都是可以傳入一個類作為引數
def say(cls): #:但不同的是 這裡傳入的不再是類名 而是使用cls進行代指類名 cls就包含了你所呼叫的類
print(cls.name) #:這樣的好處就是你可以隨意的更改類名 如果你修改了類的名字那麼staticmethod函式也需要修改,但classmethod就不需要"cls"==類




p = Person("yangyang")
p.tell()
p.talk()
p.say()


#使用@staticmethod/@classmethod對時間進行切分操作
'''
使用者輸入日期格式為:"2020-7-14"
需要將年,月,日分別打印出來
'''

class Dates:
def __init__(self,year = 0,morth = 0,day = 0):
self.year = year
self.morth = morth
self.day = day

@staticmethod
def get_date(string_date): #:資料進入到get_date方法中
year,morth,day = string_date.split("-") #:按照"-"進行切分
data1 = Dates(year,morth,day) #:例項化 將三個引數傳入到Dates類中 == Dates("year","morth","day")
return data1 #:返回data1

def out_date(self): #:slef == Dates
print("year",self.year) #:列印Dates類中的.year屬性
print("morth",self.morth) #:列印Dates類中的.morth屬性
print("day",self.day) #:列印Dates類中的.day屬性


if __name__ == '__main__':
years = Dates.get_date("2020-7-14") #:將值傳入到get_date這個方法中
years.out_date() #:呼叫out_date方法


#:@classmethod
class Dates:
def __init__(self,year = 0,morth = 0,day = 0):
self.year = year
self.morth = morth
self.day = day

@classmethod #:呼叫classmethod函式
def get_date(cls,string): #:cls == 類 誰呼叫類 cls就等於誰
year,morth,day = string.split("-") #:切分操作
date1 = cls(year,morth,day) #: 將上面的"year","morth","day"三個變數傳入到類裡面
return date1 #:返回date1 // date 返回給 t t == Dates(year,morth,day)
#:print times
def out_date(self): #:slef == t
print("year",self.year) #:Dates.year
print("morth",self.morth) #:Dates.morth
print("day",self.day) #:Dates.day

if __name__ == '__main__':
years = input("input('year-morth,day')>>>")
t = Dates(years)
t.out_date()