Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2015 19:07:17

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Как атрибуту класса внедрить ссылку на родителя?

Пусть есть код (написанный по аналогии с моделями Django ORM)

class YandexKeywordsTable(XlsxTable):
    utm_mark__keyword = UnicodeAndTotalXlsxColumn(u'Ключевое слово', width=40)
    clicks = IntegerXlsxColumn(u'Клики', width=10)
    shows = IntegerXlsxColumn(u'Число показов', width=18)
    ctr = YandexCtrXlsxColumn(u'CTR, %', width=10)
    average_cpc = AverageCpcXlsxColumn(u'Сред. цена за клик, руб', width=22)
    cost = FloatXlsxColumn(u'Стоимость с НДС, руб', width=20)
Как обьектам колонок дать ссылку на класс YandexKeywordsTable? магия metaclass поможет?
Можно конечно при YandexKeywordsTable.__init__ инжектить, но проблема в том, что обьекты колонок создаются при компиляции класса и в __init__ колонок нет ссылки на класс, в котором они использованы, а надо бы…
Заранее спасибо за советы

Офлайн

#2 Апрель 7, 2015 19:25:44

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

Как атрибуту класса внедрить ссылку на родителя?

Смотрите код джанги, его же не скрывают. В джанге всю магию делает метакласс.



Офлайн

#3 Апрель 7, 2015 19:27:26

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

Как атрибуту класса внедрить ссылку на родителя?

Suguby27
а надо бы…
а, кстати, зачем?



Офлайн

#4 Апрель 7, 2015 19:31:57

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

Как атрибуту класса внедрить ссылку на родителя?

Это надо было?

class Field(object):
    def __get__(self, instance, owner):
        print instance, owner
        return instance
class Foo(object):
    field = Field()
f = Foo()
f.field



Офлайн

#5 Апрель 8, 2015 12:29:16

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Как атрибуту класса внедрить ссылку на родителя?


FishHook
Это надо было?

Не совсем, но за __get__ спасибо. Нужно что бы, скажем
class Foo(object):
    field = Field()
class Field(object):
    def __init__(self, **kwargs):
         if self.parent_class.param > 0:
              pass
         # etc
колонки могут зависеть от контекста - в каком обьекте они живут, там может быть форматирование и т.п.
Но я уже понял, что в ините колонки этот контектс вообще не получить - обьект родительского класса будет создаваться непойми когда.
Все равно спасибо за помощь

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version