classa(object):
a = 'a'
@staticmethod
deffool1(name):
(name)
deffool2(self, name):
(name)
@classmethod
deffool3(cls, name):
(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的使用方法和輸出完全相同,但兩者仍存在區別。
classa(object):
a = 'a'
@staticmethod
deffoo1(name):
'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):
'hello
', name
@classmethod
deffoo3(cls, name):
'hello
', name
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...