我的理解是,绑定方法和类实例是两个不同的对象,因此我希望它们应具有不同的内存位置。但是在以下脚本中,实例方法对象和实例对象的内存位置相同。我在不同的版本和系统上尝试过,但结果是相同的。但更重要的是,输出中的值是内存位置还是其他?如果是内存位置,那怎么可能呢?
class MyClass1:
def mydef1(self):
pass
ins1 = MyClass1()
print(ins1.mydef1)
print(ins1)
输出
PS E:\dev\Python> python.exe .\method_test.py
<bound method MyClass1.mydef1 of <__main__.MyClass1 object at 0x0000019F6CE03DD8>>
<__main__.MyClass1 object at 0x0000019F6CE03DD8>
PS E:\dev\Python>
答案 0 :(得分:3)
方法不在同一位置,您正在错误地读取输出。根据您的情况,该对象位于地址0x0000019F6CE03DD8
上,而不是绑定方法上。
此示例显示内存位置不同:
class MyClass1:
def mydef1(self):
pass
ins1 = MyClass1()
print(ins1.mydef1)
print(ins1)
print(hex(id(ins1.mydef1)))
print(hex(id(ins1)))
打印:
<bound method MyClass1.mydef1 of <__main__.MyClass1 object at 0x7ffff670a1d0>>
<__main__.MyClass1 object at 0x7ffff670a1d0>
0x7ffff7f87ac8
0x7ffff670a1d0