Python Metaclass : Understanding the 'with_metaclass()'
我想问一下,在类的定义中,
例如。:
1 | class Foo(with_metaclass(Cls1, Cls2)): |
- 类从元类继承是一种特殊情况吗?
- 新类也是元类吗?
它为您创建一个具有指定的元类的基类,与运行代码的Python版本兼容。
从文件中引用:
Create a new class with base class base and metaclass metaclass. This is designed to be used in class declarations like this:
1
2
3
4
5
6
7
8
9
10 from six import with_metaclass
class Meta(type):
pass
class Base(object):
pass
class MyClass(with_metaclass(Meta, Base)):
pass
号
这是必需的,因为附加元类的语法在python 2和3之间发生了更改:
Python2:
1 2 | class MyClass(object): __metaclass__ = Meta |
Python3:
1 2 | class MyClass(metaclass=Meta): pass |
号
1 2 3 | def with_metaclass(meta, *bases): """Create a base class with a metaclass.""" return meta("NewBase", bases, {}) |
在python 2和3上,
更新:
1 2 3 4 5 | import six @six.add_metaclass(Meta) class MyClass(Base): pass |
。
这里是补丁说明,这里是一个类似的、详细的示例和使用装饰器替代品的解释。