为什么CPython创建同一方法的多个实例?

时间:2018-07-07 22:54:08

标签: cpython

>>> (1).__str__!=(2).__str__
True

将它们做成单独的对象而不是引用单个对象是否有任何技术原因?似乎会更有效率

1 个答案:

答案 0 :(得分:2)

那是因为您没有得到__str__函数,而是得到了它的方法包装。

>>> x = (1).__str__
>>> type(x)
<class 'method-wrapper'>
>>> x()
'1'
>>> x.__self__
1

>>> x = (2).__str__
>>> x()
'2'
>>> x.__self__
2

方法包装器是保留对self的引用的对象。因此,每个实例都必须不同。

有关更多详细信息,请选中this question