答案 0 :(得分:1)
如我所见,您希望在创建类之后更改元类。如果是这样,您可以使用与更改对象类相同的方式实现它。对于初学者,初始元类需要与类型不同,新元类的__init__
和__new__
不会被调用(尽管您可以手动调用__init__
或方法执行__init__
的工作。
NewClass = SomeMetaClass.__new__('NewClass', (object, ), {})
__new__
方法类似于__init__
,并在__init__
之前调用。通过以下示例可以清楚地看出:
In [1]: class Foo(object):
def __new__(cls, *args, **kwargs):
print 'inside __new__'
return super(Foo, cls).__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
print 'inside __init__'
In [2]: f = Foo()
inside __new__
inside __init__
调用f = Foo()
时的执行顺序如下:
Foo.__new__()
被称为__super__
__new__
方法,并实例化了该类。 __init__
的{{1}}方法。查看this了解详情。
希望有所帮助。