我正在学习方法绑定,并试图理解解释器如何在特定类型的对象与其实例方法之间建立连接。假设我编写了以下代码:
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)存储在一起?怎么样?
答案 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()