英文文檔: staticmethod(function) Return a static method for function. A static method does not receive an implicit first argument. The @staticmethod form ...
英文文檔:
staticmethod
(function)
Return a static method for function.
A static method does not receive an implicit first argument.
The @staticmethod
form is a function decorator – see the description of function definitions in Function definitions for details.
It can be called either on the class (such as C.f()
) or on an instance (such as C().f()
). The instance is ignored except for its class.
說明:
1. 類中普通的方法,實際上既可以被類直接調用也可以被類的實例對象調用,但是被實例對象調用的時候,要求方法至少有一個參數,而且調用時會將實例對象本身傳給第一個參數。
>>> class Student(object): def __init__(self,name): self.name = name def sayHello(lang): print(lang) if lang == 'en': print('Welcome!') else: print('你好!') >>> Student.sayHello <function Student.sayHello at 0x02AC7810> >>> a = Student('Bob') >>> a.sayHello <bound method Student.sayHello of <__main__.Student object at 0x02AD03F0>>
>>> Student.sayHello('en') # 類調用的時候,將'en'傳給了lang參數 en Welcome! >>> a.sayHello() # 類實例對象調用的時候,將對象本身自動傳給了lang參數,不能再接收參數 <__main__.Student object at 0x02AD03F0> 你好!
>>> a.sayHello('en')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a.sayHello('en')
TypeError: sayHello() takes 1 positional argument but 2 were given
2. staticmethod函數功能就是將一個方法定義成類的靜態方法,正確的方法是使用 @staticmethod裝飾器,這樣在實例對象調用的時候,不會把實例對象本身傳入靜態方法的第一個參數了。
# 使用裝飾器定義靜態方法 >>> class Student(object): def __init__(self,name): self.name = name @staticmethod def sayHello(lang): print(lang) if lang == 'en': print('Welcome!') else: print('你好!') >>> Student.sayHello('en') #類調用,'en'傳給了lang參數 en Welcome! >>> b = Student('Kim') #類實例對象調用,不再將類實例對象傳入靜態方法 >>> b.sayHello() Traceback (most recent call last): File "<pyshell#71>", line 1, in <module> b.sayHello() TypeError: sayHello() missing 1 required positional argument: 'lang' >>> b.sayHello('zh') #類實例對象調用,'zh'傳給了lang參數 zh 你好!