Форум сайта python.su
0
Доброго времени суток.
Пытюсь разобраться с дескрипторами. Вот пример:
class Desc(object): val=0 def __get__(self,instance,owner): print '__get__ method' return self.val def __set__(self,instance,val): self.val=val class A(object): attr=Desc() arr=[Desc()] a=A() print a.attr print a.arr[0]
Отредактировано FishHook (Ноя. 27, 2012 13:01:35)
Офлайн
568
Кривенько, конечно.
class Desc(object): val=0 def __get__(self, instance, owner): return self.val def __set__(self, instance, val): self.val=val class A(object): attr=Desc() arr=[Desc()] def __getitem__(self, item): return self.arr[item].__get__(None, None) a=A() print a.attr print a[0]
Офлайн
0
Ясно, т.е. какого-то красивого решения нет. Ок.
Тогда ещё вот такой вопрос, понимаю что наверное надо подъучить матчасть, но всё-же:
Почему такой код:
cclass Desc(object): val=0 def __get__(self,instance,owner): print '__get__ method' return self.val def __set__(self,instance,val): print '__set__ method' self.val=val class A(object): attr=Desc() a=A() b=A() print id(a.attr) print id(ba.attr)
Офлайн
173
xostattr - Аттрибут класса A, инициализируется он один раз attr = Desc()
Почему такой код
Выдаёт одинаковые значения
xostМожно хранить значения в инстансе
как можно добиться чтоб a.attr и b.attr были различными ?
class Desc(object): val = 0 def __get__(self, instance, owner): print 'get', instance, owner return getattr(instance, 'val', self.val) def __set__(self, instance, val): print 'set', instance, val instance.val = val class A(object): attr = Desc() a=A() b=A() print id(a.attr) == id(b.attr) # True a.attr = 1 print id(a.attr) == id(b.attr) # False
Офлайн