Python:实例方法绑定如何在内存中发生

时间:2018-10-14 07:01:00

标签: python python-3.x object methods

我正在学习方法绑定,并试图理解解释器如何在特定类型的对象与其实例方法之间建立连接。假设我编写了以下代码:

class Point:
    def __init__(self, x,y):
        self._x=x
        self._y=y

    def draw(self):
        print(self._x, self._y)

p1=Point(1,2)
p1.draw() 

有人告诉我draw是一个实例方法。如果是这样,那么抽奖存储在哪里?我知道属性存储在字典中,该字典的键是属性名称,值是属性的值,但是我正在努力在实例方法和对象本身之间建立连接。它们是存储在类存储在内存中的位置,还是与对象(p1)存储在一起?怎么样?

1 个答案:

答案 0 :(得分:1)

您可以说方法也是类中的属性,它们基本上是绑定到类的函数。您可以通过Class.__dict__看到它们。

使用Point.__dict__时,它会返回如下映射:

mappingproxy({'__module__': '__main__',
              '__init__': <function __main__.Point.__init__(self, x, y)>,
              'draw': <function __main__.Point.draw(self)>,
              '__dict__': <attribute '__dict__' of 'Point' objects>,
              '__weakref__': <attribute '__weakref__' of 'Point' objects>,
              '__doc__': None})

您会看到draw是类Point内的函数对象,而self是实例。

由于draw属于类Point

,因此您也可以使用这种语法来调用这些方法。
Point.draw(p1)

相同
p1.draw()