почему вызывается обработчик у старого класса?
hi all, проясните пожалуйста ситуацию
class A(object):
def __set__(self, instance, val):
print id(self), id(instance)
class B(object):
field1 = A()
c1 = B()
print "at start", id(c1.field1)
c1.field1 = "set1"
newset = A()
c1.__dict__['field1'] = newset
print "after", id(newset), id(c1.field1)
c1.field1 = "set2"
на выходе имеем
at start 46724144
46724144 46724112
after 46724048 46724048
46724144 46724112
таким образом получается что статичный метод field1 при старте и __set__ один и тот-же - все верно
захотелось с таким-же именем создать "свой" атрибут - id нового атрибута другой все правильно, а когда присваваем значение вызывается метод у статичного атрибута.. а не у нового.
почему так получается? особенно когда id у статичного и Id у нового атрибута разные.
class A(object):
def __set__(self, instance, val):
print id(self), id(instance)
class B(object):
field1 = A()
c1 = B()
print "at start", id(c1.field1)
c1.field1 = "set1"
newset = A()
c1.__dict__['field1'] = newset
print "after", id(newset), id(c1.field1)
c1.field1 = "set2"
на выходе имеем
at start 46724144
46724144 46724112
after 46724048 46724048
46724144 46724112
таким образом получается что статичный метод field1 при старте и __set__ один и тот-же - все верно
захотелось с таким-же именем создать "свой" атрибут - id нового атрибута другой все правильно, а когда присваваем значение вызывается метод у статичного атрибута.. а не у нового.
почему так получается? особенно когда id у статичного и Id у нового атрибута разные.
