Этот вопрос отвечает на вопрос, как реализовать __getattr__
для атрибутов static/class - используя метакласс. Однако я хотел бы реализовать __getattr__
и __getattribute__
для класса, сгенерированного type()
, и, чтобы сделать вещи еще более интересными, класс наследует класс, который имеет собственный метакласс, который должен выполняться правильно.
Код, резюмирующий абзац выше:
class Inherited(metaclass=SomeFancyMetaclass):
...
generated_class = type("GeneratedClass", (Inherited,), {})
def __class_getattr__(cls, name): # __getattr__ for class, not sure how the code shall look exactly like
return getattr(cls, name)
setattr(generated_class, "__getattr__", __class_getattr__) # similarly for __getattribute__
Вопрос: возможно ли это, и если да, то как? Может ли кто-нибудь предоставить минимальный рабочий пример?
__getattr__
и__setattr__
в метаклассе, но тогда вы должны использовать метакласс для создания класса, я считаю - person juanpa.arrivillaga   schedule 12.04.2019type("GeneratedClass", (Inherited,), {'__getattr__': your_getattr_impl})
, аyour_getattr_impl
должна иметь подпись(self, name)
(self
, а неcls
, потому что экземпляр класса будет передан при использовании), если только вы не хотите делать это на уровне метакласса. Также вам действительно не нужен метакласс для динамического создания класса с настраиваемым атрибутом для функций dunder. Чего именно вы пытаетесь достичь? - person metatoaster   schedule 12.04.2019MyCustomMeta(...,...,...)
так же, как вы используетеtype(...,...,...)
, но они просто должны фактически реализоватьMyCustomMeta
Я имею в виду, что все это, вероятно, излишне. Зачем останавливаться сейчас... - person juanpa.arrivillaga   schedule 12.04.2019