在类创建时动态分配动态创建的元类

时间:2014-03-31 17:29:49

标签: python metaclass

我认为这个问题听起来有点混乱,所以我将在下面提供更多细节。

我有两个类定义,其中一个继承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。似乎动态创建的类由于某种原因忽略了给定的动态创建的元类。为什么会发生这种情况?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

相反,请使用

>>> HouseInsurance = Insurance('HouseInsurance', (Product,), {})
>>> type(HouseInsurance)
__main__.Insurance

__metaclass__是程序员在文件解析时表达类对象的构造函数的一种方式,而不是运行时。