Сегодня я задал вопрос, в котором мне нужно было только решение моей проблемы. Я ожидал использования метаклассов, но получил что-то другое, и это сработало. Однако теперь меня интересует кое-что, связанное с моим предыдущим вопросом: почему мой метакласс не работал?
Вот ссылка на мой предыдущий вопрос, но вам не обязательно ее читать, чтобы ответить на этот вопрос: Как создать простой метакласс?
Итак, позвольте мне задать этот вопрос еще раз, на этот раз по совершенно другой причине: как создать простой метакласс? Вот что у меня есть, и я не понимаю, почему это не работает.
class MyMeta(type):
def __new__(mcls, name, bases, attrs):
attrs['my_attr'] = True
return super().__new__(mcls, name, bases, attrs)
class MyClass:
__metaclass__ = MyMeta
print(MyClass.my_attr)
Последняя строка выводит следующую ошибку:
AttributeError: type object 'MyClass' has no attribute 'my_attr'
1 ответ
В Python 3 вы указываете метакласс по-другому:
class MyClass(metaclass=MyMeta):
pass
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
print()
как функцию ..class MyClass(metaclass=MyMeta):
на Python 3