Image

Imagejekel wrote in Imageru_python

почему вызывается обработчик у старого класса?

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 у нового атрибута разные.