Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 27, 2012 11:53:34

xost
От:
Зарегистрирован: 2009-08-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с дескрипторами.

Доброго времени суток.

Пытюсь разобраться с дескрипторами. Вот пример:

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]
Вывод:
__get__ method
0
<__main__.Desc object at 0x00B6D510>

Вопрос. Есть ли возможность работать с элементами массива a.arr, так же как с a.attr ?


Код - в теги!!!!



Отредактировано FishHook (Ноя. 27, 2012 13:01:35)

Офлайн

#2 Ноя. 27, 2012 13:09:06

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите разобраться с дескрипторами.

Кривенько, конечно.

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]



Офлайн

#3 Ноя. 27, 2012 14:12:34

xost
От:
Зарегистрирован: 2009-08-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с дескрипторами.

Ясно, т.е. какого-то красивого решения нет. Ок.
Тогда ещё вот такой вопрос, понимаю что наверное надо подъучить матчасть, но всё-же:
Почему такой код:

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)

Выдаёт одинаковые значения и как можно добиться чтоб a.attr и b.attr были различными ?



Офлайн

#4 Ноя. 27, 2012 16:53:34

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Помогите разобраться с дескрипторами.

xost
Почему такой код
Выдаёт одинаковые значения
attr - Аттрибут класса 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
Что конкретно пытаетесь сделать?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version