Насколько я понимаю, каждый экземпляр класса хранит ссылки на методы экземпляра.
Я думал, что в принципе все экземпляры класса имеют одинаковые методы экземпляров. Если это так, то как экономия памяти, так и логическая ясность позволяют предположить, что методы экземпляра должны храниться в объекте класса, а не в объекте экземпляра (при этом объект экземпляра просматривает их через объект класса; конечно, каждый экземпляр имеет ссылку на свой объект). учебный класс). Почему это не сделано?
Вторичный вопрос. Почему методы экземпляра недоступны способом, аналогичным атрибутам экземпляра, т. Е. Через __dict__
или через какой-либо другой системный атрибут? Есть ли способ посмотреть (и, возможно, изменить) имена и ссылки на методы экземпляра?
EDIT:
Ой, прости. Я был совершенно неправ. Я видел следующий код 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)