看下面一串**:
class mycls(object):
__age = 20
def __init__(self):
self.__age = 18
def a(self):
return self.__age
@classmethod
def b(cls):
return cls.__age
@staticmethod
def c():
return mycls.__age # 這裡沒引數傳入,必須通過類物件訪問
@classmethod
def update(cls,age):
cls.__age = age
test = mycls()
# 普通方法
print(test.a())
# 類方法可以通過例項物件和類物件去呼叫
print(test.b())
print(mycls.b())
# 靜態方法可以通過例項物件和類物件去呼叫
print(test.c())
print(mycls.c())
# 類方法修改類屬性
總結:1、例項方法需要通過例項物件去呼叫,靜態方法和類方法例項物件和類物件都可以呼叫。
2、例項方法第乙個引數是self,類方法第乙個引數是cls,靜態方法不需要額外的引數。
3、當__init__中定義的例項屬性與類屬性衝突時,例項方法呼叫的結果是例項屬性,靜態方法和類方法呼叫的是類屬性。
4、類方法還有乙個作用就是可以對類屬性進行修改。
拓展:上面幾種方法都可以呼叫私有屬性?那還有沒有其他更好的方法呢?這時@property登場了
class mycls(object):
__age = 20
@property
def age(self):
return self.__age
test = mycls()
print(test.age)
看這段**你可能會疑問,誒,這跟上面沒什麼區別啊,仔細看看test.age,是不是發現少了個括號,難道我寫錯了嗎?其實@property的效果就是讓test以訪問屬性的方式去訪問age方法。在這裡你可能覺得@property並沒有簡潔多少啊,大家可以參考下文,就會發現@property好處 例項方法 靜態方法 類方法
首先新建乙個日期date類,屬性為年,月,日,tomorrow 是例項方法,這個最常見,比較簡單,例項方法的第乙個引數是例項物件self 當我們傳入的年月日是2018 6 4這樣的形式,我們就需要先進行字串處理,在這裡使用了元組的拆包 這是最基本的方式,但是這樣寫會有乙個問題,每次傳參都需要進行字串...
類方法,例項方法,靜態方法
python 中的三種方法,有三種類方法,例項方法,靜態方法,這三種方法都在類中,區別在於呼叫的方式不同。例項物件能的呼叫這三種方法,類只能呼叫類方法和靜態方法。class foo object def init self,name self.name name deford func self 定...
例項方法 類方法 靜態方法
示例方法 第乙個引數為self,必須例項化之後才能呼叫的方法 類方法 使用 classmethod進行裝飾,第乙個引數為cls,可以被類呼叫,也可以被例項呼叫。靜態方法 使用 staticmethod進行裝飾,沒有固定的引數,可以被類呼叫,也可以被例項呼叫,一般可以說跟類和例項沒有關係。classa...