python cls方法 關於類方法中的cls

2021-10-19 20:06:49 字數 1531 閱讀 7404

在python的類方法中,預設使用的第乙個引數是cls,而在例項方法中,一般使用self作為第乙個引數。

兩處比較:

(1)比較一般類方法中的self和cls的區別:一般來說,使用某個類的方法,需要先將類例項化,賦予乙個物件才可以呼叫類中的方法,但是如果使用了@staticmethod 或@classmethod,就可以不用例項化,直接類名.方法名()來呼叫。這有利於組織**,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於命名空間的整潔。舉例:

class a(object):

a='a'

@staticmethod

def foo1(name):#靜態函式

print("hello",hello)

def foo2(self,name):#常規函式

print("hello",name)

@classmethod

def foo3(cls,name):#類方法

print("hello",name)

接著我們例項化a類,a=a()

print(a.foo1('ma'))#output:hello ma

print(a.foo1('ma'))#output:hello ma

而foo2是常規函式,只能通過類的例項化來呼叫,即a.foo2()來呼叫。

而foo3是類函式,cls作為第乙個引數用來表示類本身,在類方法中用到,類方法只是與類本身有關而與例項無關的方法。可以通過例項化來呼叫,也可以通過類名.類函式名來呼叫。即a.foo3('mam')或a.foo3('mam')

(2)staticmethod和classmethod方法的區別

在classmethod中可以呼叫類中定義的其他方法、類的屬性,但staticmethod只能通過a.a呼叫類的屬性,但無法通過在該函式內部呼叫a.foo2()。

class a(object):

a = 'a'

@staticmethod

def foo1(name):

print 'hello', name

print a.a # 正常

print a.foo2('mamq') # 報錯: unbound method foo2() must be called with a instance as first argument (got str instance instead)

def foo2(self, name):

print 'hello', name

@classmethod

def foo3(cls, name):

print 'hello', name

print a.a

print cls().foo2(name)#可以在foo3中呼叫foo2,因為持有cls引數,彷佛是類本身,故可以呼叫該foo2方法。

第三點是關於cls(),其實這就是類本身,比如這裡的cls()=a,如果cls()裡面有引數,那麼這個引數就是建構函式init(self,parameter1,parameter2)中的引數1,2,同時還是表示類本身。舉例:

python_9day

關於 python cls 筆記

最近學習到 class後發下你有的class 中有 cls,有的無cls,code如下 class a def pen cls print pen bag m r def knife cls,size print knife bag swissgear,size s size 起先沒搞明白 這括號裡...

關於類的方法 不是類方法 ,類方法指標

關於類的方法 不是類方法 類方法指標 關於類的方法 不是類方法,這裡指object pascal中的靜態方法,相當於c 的成員函式 1 帶有隱含引數 self 2 方法是方法,資料是資料。3 delphi的方法是乙個結構 type tmethod record code pointer 方法的入口位...

關於類和方法

對於初學python,對類和方法的理解絕對讓很多人崩潰了。特別是裡面的self,簡直莫名其妙。但python簡明教程裡面對這段內容其實講解的非常清楚。類和物件是物件導向程式設計的兩個主要方面。類建立乙個新型別,而物件這個類的 例項 這類似於你有乙個int型別的變數,這儲存整數的變數是int類的例項 ...