【发布时间】:2013-03-28 02:19:02
【问题描述】:
我今天早些时候问了一个问题,我只想为我的问题找到一个解决方案。 我期待使用元类,但得到了一些不同的东西并且它起作用了。 但是,现在我对与我之前的问题相关的东西感兴趣:为什么我的元类不起作用?
这是我上一个问题的链接,但您无需阅读它即可回答此问题:How do I create a simple metaclass?
所以让我再次问这个问题,这一次是出于完全不同的原因:我如何创建一个简单的元类? 这就是我所拥有的,我不明白为什么它不起作用。
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'
【问题讨论】:
-
你在这里使用 Python 3 吗?您正在使用
print()作为函数.. -
@MartijnPieters 是的,我使用的是 Python 3。显然错误不是由打印引起的。 Tt 清楚地说明出了什么问题,我只是不知道为什么。
-
你必须在 Python 3 上声明
class MyClass(metaclass=MyMeta): -
@JBernardo 谢谢,工作:)
-
@MarkusMeskanen:我问的原因是因为元类的语法在 2 和 3 之间有所不同,并且想确定我们在这里谈论的是什么版本。
标签: python class factory metaclass