python中cls和self的不同

2022-10-01 17:39:09 字數 1560 閱讀 1734

class

a(object):

a = 'a'

@staticmethod

deffool1(name):

print

(name)

deffool2(self, name):

print

(name)

@classmethod

deffool3(cls, name):

print

(name)

首先定義了乙個類a,類a中有3個函式,fool1是靜態函式,用@staticmethod裝飾器裝飾,既可以有類名呼叫,也可以用類的例項呼叫:

a =a()

a.foo1(

'mamq

') #

輸出: hello mamq

a.foo1('

mamq

') #

輸出: hello mamq

fool2是正常函式,是類的例項的函式,只能通過例項a呼叫:

a.foo2('

mamq

') #

輸出: hello mamq

a.foo2('

mamq

') #

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

fool3是類函式,cls作為第乙個引數用來表示類本身,類方法只與類本身有關而與例項無關,如下兩種方式都可以正常輸出:

a.foo3('

mamq

') #

輸出: hello mamq

a.foo3('

mamq

') #

輸出: hello mamq

大家可以發現@staticmethod和@classmeithod的使用方法和輸出完全相同,但兩者仍存在區別。

class

a(object):

a = 'a'

@staticmethod

deffoo1(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)

deffoo2(self, name):

print

'hello

', name

@classmethod

deffoo3(cls, name):

print

'hello

', name

print

a.a

print cls().foo2(name)

python中self和cls的區別

1 self表示乙個具體的例項本身。如果用了staticmethod,那麼就可以無視這個self,將這個方法當成乙個普通的函式使用。2 cls表示這個類本身。class a object deffoo1 self print hello self staticmethod deffoo2 print...

python類中的self引數和cls引數

1.self表示乙個類的例項物件本身。如果用了staticmethod就無視這個self了,就將這個方法當成乙個普通的函式使用了。2.cls表是這個類本身。為證 class a object deffunc1 self print func1 self staticmethod deffunc2 p...

python類中的self引數和cls引數

1.self表示乙個類的例項物件本身。如果用了staticmethod就無視這個self了,就將這個方法當成乙個普通的函式使用了。2.cls表是這個類本身。為證 class a object deffunc1 self print func1 self staticmethod deffunc2 p...