Найти - Пользователи
Полная версия: Как атрибуту класса внедрить ссылку на родителя?
Начало » Python для экспертов » Как атрибуту класса внедрить ссылку на родителя?
1
Suguby27
Пусть есть код (написанный по аналогии с моделями 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__ колонок нет ссылки на класс, в котором они использованы, а надо бы…
Заранее спасибо за советы
FishHook
Смотрите код джанги, его же не скрывают. В джанге всю магию делает метакласс.
FishHook
Suguby27
а надо бы…
а, кстати, зачем?
FishHook
Это надо было?

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

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

Не совсем, но за __get__ спасибо. Нужно что бы, скажем
class Foo(object):
    field = Field()
class Field(object):
    def __init__(self, **kwargs):
         if self.parent_class.param > 0:
              pass
         # etc
колонки могут зависеть от контекста - в каком обьекте они живут, там может быть форматирование и т.п.
Но я уже понял, что в ините колонки этот контектс вообще не получить - обьект родительского класса будет создаваться непойми когда.
Все равно спасибо за помощь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB