【发布时间】:2016-09-19 03:05:56
【问题描述】:
Python 3.x 语言参考描述了两种创建方法对象的方法:
如果该属性是用户定义的函数对象或类方法对象,则可以在获取类的属性时(可能通过该类的实例)创建用户定义的方法对象。
当通过实例之一从类中检索用户定义的函数对象来创建实例方法对象时,它的 self 属性是实例,并且方法对象被称为绑定。新方法的 func 属性是原来的函数对象。
当通过从类或实例中检索另一个方法对象来创建用户定义的方法对象时,其行为与函数对象相同,只是新实例的 func 属性不是原始方法对象而是它的 func 属性。
当一个实例方法对象被调用时,底层函数(func)被调用,将类实例(self)插入到参数列表的前面。例如,当 C 是一个包含函数 f() 定义的类,而 x 是 C 的一个实例时,调用 x.f(1) 等效于调用 C.f(x, 1)。
当实例方法对象派生自类方法对象时,存储在self中的“类实例”实际上就是类本身,因此调用xf(1)或Cf(1 ) 等价于调用 f(C,1),其中 f 是底层函数。
在不同的方面,它们都有不同的__func__ 和__self__ 值,但我不太了解这两种不同的方式,谁能给我解释一下?
Python 语言参考 |标准类型层次结构: https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy
【问题讨论】:
标签: python python-3.x methods attributes instance