相关疑难解决方法(0)

在 Python 3 中,是否可以为具有多个基的类动态创建元类?

在Python 2中,通过一个技巧,可以创建一个具有多个基类的类,尽管基类具有不是彼此子类的元类。

诀窍是这些元类本身有一个元类(将其命名为“元元类”),并且此元元类为元类提供一个调用方法,该方法可以在必要时动态创建基本元类的公共子元类。最终,生成一个类,其元类是新的子元类。这是代码:

>>> class MetaMeta(type):
...     def __call__(mcls, name, bases, methods):
...         metabases = set(type(X) for X in bases)
...         metabases.add(mcls)
...         if len(metabases) > 1:
...             mcls = type(''.join([X.__name__ for X in metabases]), tuple(metabases), {})
...         return mcls.__new__(mcls, name, bases, methods)
... 
>>> class Meta1(type):
...     __metaclass__ = MetaMeta
... 
>>> class Meta2(type):
...     __metaclass__ = MetaMeta
... 
>>> class C1:
...     __metaclass__ = Meta1
... 
>>> class C2:
...     __metaclass__ = Meta2
... 
>>> type(C1) …
Run Code Online (Sandbox Code Playgroud)

python metaclass

5
推荐指数
1
解决办法
4340
查看次数

在Python 3中确定一个类的元类

在Python 2中,我可以检查一个类的__metaclass__属性来确定它的元类.

我在Python 3中如何做同样的事情?

python metaclass python-3.x

4
推荐指数
1
解决办法
236
查看次数

标签 统计

metaclass ×2

python ×2

python-3.x ×1