class Foo:
def bar(self):
print('bar')
obj = Foo()
obj.bar()
# obj = Foo()
# Foo.bar(obj)
方法:
普通方法:保存在類中,由對象來調用(上面代碼中兩個方法都可以,但是不管是用對象調用還是用類調用,都要首先定義一個對象,而且一般都用第一種方法調用),self參數是對象。
靜態方法:保存在類中,由類直接調用,並且不用self參數
類方法:保存在類中,由類直接調用,cls參數是當前類
class Foo:
def bar(self):
print('bar')
# 加裝飾器裝飾後,變成靜態方法,self就不是必須的了
@staticmethod
def sta():
print('123')
@staticmethod
def stat(a1, a2):
print(a1, a2)
Foo.sta() # 123
Foo.stat(1, 2) # 1 2
class Foo:
def bar(self):
# self是對象
print('bar')
# 加裝飾器裝飾後,變成靜態方法,self就不是必須的了
@staticmethod
def sta():
print('123')
@staticmethod
def stat(a1, a2):
print(a1, a2)
@staticmethod
def classmd(cls):
# cls是類名,不依賴對象
print(cls)
print('classmd')
Foo.classmd(Foo)
# <class '__main__.Foo'>
# classmd
應用場景:
如果對象中需要保存一些值,執行某功能時需要使用對象中的值,用普通方法。
不需要任何對象中的值時,用靜態方法。(類方法沒有太大的用處,它的功能可以通過靜態方法實現)