我实际上正在经历 descriptors python 文档并遇到了这个例子
>>> class D(object):
def f(self, x):
return x
>>> d = D()
>>> D.__dict__['f'] # Stored internally as a function
<function f at 0x00C45070>
>>> id(D.__dict__['f']) # Memory location
49294384
>>> D.f # Get from a class becomes an unbound method
<unbound method D.f>
>>> id(D.f )
48549440
>>> d.f # Get from an instance becomes a bound method
<bound method D.f of <__main__.D object at 0x00B18C90>>
>>> id(d.f)
48549440
所以从上面的代码中,我了解到当我们直接访问时,python将类的函数定义/声明
作为一个单独的对象存储在类__dict__
变量内部使用 __dict__
变量,它的内存位置为 49294384
但为什么当通过 Class 或 Object 访问时,它显示为具有不同
如 内存位置 48549440
的不同函数/方法对象?D.f 和 d.f
当我们使用 __dict__
变量访问时,它不应该引用同一个对象吗?。如果是,为什么?
最佳答案
D.f
是一个接受一个参数的函数 (self
)
x = D.f
x(d)
d.f
是一个“绑定(bind)方法”,即 self
参数已经填充的函数。你可以说
x = d.f
x()
因此它不能与 D.f
相同,必须位于不同的位置。
关于python - 在python中从类vs对象调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345763/