Можно ли обращаться к атрибутам экземпляра в метаклассе?

Вопрос не ради решения какой-то задачи, а просто для понимания. Тестирую всё на таком примере кода:

class MetaUpdate(type):
    def __new__(cls, clsname, bases, attrs):
        update_attrs = {
            attrs if attrs.startswith('__') else attrs.upper(): v for attrs, v in attrs.items()
        }
  
        return super(MetaUpdate, cls).__new__(
            cls, clsname, bases, update_attrs
        )

class MyClass(metaclass = MetaUpdate):
    # С атрибутом класса работает 
    correct = 'Меня видно'
    def __init__(self) -> None:
        # С атрибутом экземпляра не работает 
        self.wrong = 'Меня не видно внутри Meta'

a = MyClass()
print(dir(a)) # CORRECT, ......, wrong

Стало интересно. Можно ли обратиться к атрибутам экземпляра внутри метакласса или это технически невозможно из-за того, что __new__ срабатывает перед __init__ и методов атрибута ещё нет?


Ответы (1 шт):

Автор решения: MarianD

Как же невидно?

Вы сам видели, что print(dir(a)) вывел на экран тоже ваш атрибут wrong, и когда вы добавите команду

print(a.wrong)

вы получите на экране

Меня не видно внутри Meta
→ Ссылка