我在尝试验证Python教程发布2.7.3(日期为2012年11月01日),第9章“类”,第66页最后一行所述的实例属性和类属性之间的差异 (来源):
实例对象的有效方法名称取决于它的类。根据定义,类的所有函数对象属性都定义其实例的相应方法。因此,在我们的示例中,x.f是一个有效的方法引用,因为MyClass.f是一个函数,但x.i不是,因为MyClass.i不是。 但是x.f并不等同于MyClass.f - 它是一个方法对象,而不是函数对象。
我有这个:
class MyClass:
"""A simple example class"""
i = 12345
def f():
return 'hello world'
然后我这样做:
>>> x = MyClass()
>>> x.f
<bound method MyClass.f of <__main__.MyClass instance at 0x02BB8968>>
>>> MyClass.f
<unbound method MyClass.f>
>>> type(MyClass.f)
<type 'instancemethod'>
>>> type(x.f)
<type 'instancemethod'>
请注意,x.f
和MyClass.f
的类型都是instancemethod。虽然教程中说有所不同,但实际上它们的类型并没有区别。有人能否请澄清一下?
x.f
和MyClass.f
不是同一个东西——它是一个方法对象,而不是一个函数对象。 在我看来是正确的。 - haccksself
)和函数对象的指针进行打包创建的,因此不需要实例对象作为参数。 - haccks