Python内置函数(60)——staticmethod

发布时间:2017-3-28 10:37:44 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Python内置函数(60)——staticmethod ",主要涉及到Python内置函数(60)——staticmethod 方面的内容,对于Python内置函数(60)——staticmethod 感兴趣的同学可以参考一下。

英文文档:

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参数enWelcome!>>> 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参数enWelcome!>>> 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

上一篇:[小技巧] 打造属于 Dell XPS 13 (9350) 的专属 Windows 7 iso 镜像
下一篇:VS程序反汇编找main函数

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款