我认为这个问题听起来有点混乱,所以我将在下面提供更多细节。
我有两个类定义,其中一个继承type
:
class ProductType(type):
def __new__(cls, name, bases, attrs):
return super(ProductType, cls).__new__(cls, name, bases, attrs)
class Product(object):
__metaclass__ = ProductType
现在,在运行时,我创建了一个ProductType
的子类:
Insurance = type('Insurance', (ProductType,), {})
然后,创建一个Product
的子类,将其元类设置为Insurance
:
HouseInsurance = type('HouseInsurance', (Product,), {'__metaclass__': Insurance})
现在,由于一些显而易见的原因(我现在似乎没有看到),如果我type(HouseInsurance)
我得到ProductType
,而不是Insurance
。似乎动态创建的类由于某种原因忽略了给定的动态创建的元类。为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:2)
相反,请使用
>>> HouseInsurance = Insurance('HouseInsurance', (Product,), {})
>>> type(HouseInsurance)
__main__.Insurance
__metaclass__
是程序员在文件解析时表达类对象的构造函数的一种方式,而不是运行时。