如何在python中使用自定义元类构造动态类?

时间:2014-07-31 00:22:55

标签: python python-2.7

当我在documentation中读到时,我可以动态创建类但是如何替换这个类元类?

我应该用type替换SomeMetaClass元类吗?

问题很简单,但也欢迎简单的帮助。

1 个答案:

答案 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了解详情。

希望有所帮助。