Python基于staticmethod装饰器标示静态方法
英文文档:
staticmethod(function)
Returnastaticmethodforfunction.
Astaticmethoddoesnotreceiveanimplicitfirstargument.
The@staticmethodformisafunctiondecorator–seethedescriptionoffunctiondefinitionsinFunctiondefinitionsfordetails.
Itcanbecalledeitherontheclass(suchasC.f())oronaninstance(suchasC().f()).Theinstanceisignoredexceptforitsclass.
标示方法为静态方法的装饰器
说明:
1.类中普通的方法,实际上既可以被类直接调用也可以被类的实例对象调用,但是被实例对象调用的时候,要求方法至少有一个参数,而且调用时会将实例对象本身传给第一个参数
>>>classStudent(object): def__init__(self,name): self.name=name defsayHello(lang): print(lang) iflang=='en': print('Welcome!') else: print('你好!') >>>Student.sayHello>>>a=Student('Bob') >>>a.sayHello > >>>Student.sayHello('en')#类调用的时候,将'en'传给了lang参数 en Welcome! >>>a.sayHello()#类实例对象调用的时候,将对象本身自动传给了lang参数,不能再接收参数 <__main__.Studentobjectat0x02AD03F0> 你好! >>>a.sayHello('en') Traceback(mostrecentcalllast): File " ",line1,in a.sayHello('en') TypeError:sayHello()takes1positionalargumentbut2weregiven
2.staticmethod函数功能就是将一个方法定义成类的静态方法,正确的方法是使用@staticmethod装饰器,这样在实例对象调用的时候,不会把实例对象本身传入静态方法的第一个参数了。
#使用装饰器定义静态方法 >>>classStudent(object): def__init__(self,name): self.name=name @staticmethod defsayHello(lang): print(lang) iflang=='en': print('Welcome!') else: print('你好!') >>>Student.sayHello('en')#类调用,'en'传给了lang参数 en Welcome! >>>b=Student('Kim')#类实例对象调用,不再将类实例对象传入静态方法 >>>b.sayHello() Traceback(mostrecentcalllast): File"",line1,in b.sayHello() TypeError:sayHello()missing1requiredpositionalargument:'lang' >>>b.sayHello('zh')#类实例对象调用,'zh'传给了lang参数 zh 你好!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。