绑定方法和实例显示相同的内存位置

时间:2018-07-14 19:15:14

标签: python

我的理解是,绑定方法和类实例是两个不同的对象,因此我希望它们应具有不同的内存位置。但是在以下脚本中,实例方法对象和实例对象的内存位置相同。我在不同的版本和系统上尝试过,但结果是相同的。但更重要的是,输出中的值是内存位置还是其他?如果是内存位置,那怎么可能呢?

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>

1 个答案:

答案 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