小编典典

为什么对实例方法的引用存储在每个实例对象中,而不是存储在类对象中?

python

据我了解,类的每个实例都存储对实例方法的引用。

我认为,从概念上讲,一个类的所有实例都具有相同的实例方法。如果是这样,那么节省内存和逻辑清晰性似乎都表明实例方法应该存储在类对象中而不是实例对象中(实例对象在类对象中查找它们;当然,每个实例都对其实例进行引用)类)。为什么不这样做?

第二个问题。为什么实例方法不能以类似于实例属性的方式访问,即通过__dict__或通过某些其他系统属性?有什么方法可以查看(并可能更改)实例方法的名称和引用吗?

编辑:

哎呀,对不起。我完全错了。我看到了以下Python 2代码,并从中错误地得出结论,实例方法存储在实例中。我不确定它的作用,因为我不使用Python
2,而new不再使用Python 3。

import new
class X(object):
  def f(self):
    print 'f'
a = X()
b = X()
def g(self):
  print 'g'
# I thought this modified instance method just in a, not in b
X.f = new.instancemethod(g, a, X)

阅读 223

收藏
2021-01-20

共1个答案

小编典典

据我了解,类的每个实例都存储对实例方法的引用。

我不知道你从哪里得到的,但这是错误的。他们没有。

为什么实例方法不能以类似于实例属性的方式访问,即通过__dict__或通过某些其他系统属性?

好吧,因为它们没有存储在实例中。

有什么方法可以查看(并可能更改)实例方法的名称和引用吗?

由于这些引用不存在,因此无法更改它们。您当然可以通过常规分配创建所需的任何属性,但是请注意,实例上存储的函数不会像普通方法那样对待-
隐式传递self参数的机制不适用于它们。

2021-01-20