例項方法 類方法 靜態方法之間的比較

2021-09-26 07:29:06 字數 1382 閱讀 9634

看下面一串**:

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...