【发布时间】:2017-05-08 00:58:21
【问题描述】:
在python中,有3种方法:实例方法、静态方法和类方法。但是让我们看看下面的例子:
class foo:
def inst_method(self, *args, **kwargs): pass
@classmethod
def class_method(cls, *args, **kwargs): pass
@staticmethod
def static_method(*args, **kwargs): pass
def unknown_method(*args, **kwargs):
print('What? ')
def another_unknown():
print('What??? ')
foo.unknown_method() # OK
foo().unknown_method() # OK
foo.another_unknown() # OK
foo().another_unknown() # !!!
从语法上讲,unknown_method 的定义是有效的,可以在类上调用。但是这个方法属于哪一种呢?
感谢我收到的答案,可以肯定 unknown_method 仍然是一个实例方法,因为 self 只是一个可选名称;它可以是任何其他名称。
但是 another_unknown 呢?它只能在类上调用,不能在实例上调用。
【问题讨论】:
-
试着把它称为
foo.unknown_method()我相信它会给你一个错误,你需要一个实例(即它的实例方法) -
严格来说,“静态方法”只是一个普通的旧函数。实际上只有两种类型:绑定方法和未绑定方法。阅读“描述符协议”了解详细信息。