Python 元类不';我不能继承
在以下代码中:Python 元类不';我不能继承,python,python-3.x,metaclass,Python,Python 3.x,Metaclass,在以下代码中: 类元(类型): 定义(cls、名称、基数、属性): 印刷品(名称) 返回类型(名称、基数、属性) 类A(对象,元类=元): def do_复杂任务(自我): 通过 B(A)类: def do_次要任务(自我): 通过 我希望看到A和B都被打印出来,但我看到元类只应用于A。我怎样才能解决这个问题?我的目标是预处理A的所有子类的字段,我希望在每个子类中省略键入metaclass=Meta。您的元类实际上不是Meta。如果您执行类型(a),您将得到,因为您覆盖了Meta.\uuuuu
类元(类型):
定义(cls、名称、基数、属性):
印刷品(名称)
返回类型(名称、基数、属性)
类A(对象,元类=元):
def do_复杂任务(自我):
通过
B(A)类:
def do_次要任务(自我):
通过
我希望看到
A
和B
都被打印出来,但我看到元类只应用于A
。我怎样才能解决这个问题?我的目标是预处理A
的所有子类的字段,我希望在每个子类中省略键入metaclass=Meta
。您的元类实际上不是Meta
。如果您执行类型(a)
,您将得到
,因为您覆盖了Meta.\uuuuuuu新的
以返回普通的类型,而不是Meta
实例
一般来说,与普通类一样,对于元类,您希望覆盖\uuu init\uuu
,并让\uu new\uuu
执行默认操作
class Meta(type):
def __init__(self, name, supers, attrs):
print(name)
然后,您将看到根据需要打印A
和B
。您的元类实际上不是Meta
。如果您执行类型(a)
,您将得到
,因为您覆盖了Meta.\uuuuuuu新的
以返回普通的类型,而不是Meta
实例
一般来说,与普通类一样,对于元类,您希望覆盖\uuu init\uuu
,并让\uu new\uuu
执行默认操作
class Meta(type):
def __init__(self, name, supers, attrs):
print(name)
然后,您将看到根据需要打印A
和B
。因为您返回type(name,base,attrs)
您将得到类型为type
的对象,而不是Meta
。您可以通过打印A.\uuuu class\uuu
来检查这一点。相反,您应该返回:
return super()
由于您返回类型(名称、基数、属性)
您将得到类型为类型的对象,而不是元对象。您可以通过打印A.\uuuu class\uuu
来检查这一点。相反,您应该返回:
return super()
AivanF.:另外,虽然没有错,但是基类的声明可以简化为class A(metaclass=Meta):
。AivanF.:另外,虽然没有错,但是基类的声明可以简化为class A(metaclass=Meta):
。