确定python中的类是否是元类

时间:2015-10-26 13:35:19

标签: python python-3.x metaclass

在python中是否有办法确定类对象是否是元类?

我知道您可以使用相等运算符进行检查。     元类==类型

但这不会涵盖用户定义的元类。

2 个答案:

答案 0 :(得分:3)

测试对象是否是type的子类:

issubclass(MetaClass, type)

这会为所有元类返回True,包括type本身。

演示:

>>> class Meta(type): pass
...
>>> class Foo(object): pass
...
>>> issubclass(Meta, type)
True
>>> issubclass(Foo, type)
False

答案 1 :(得分:2)

大多数元类都是type子类(issubclass(metaklass, type),但不是全部

>>> def logging_meta(name, bases, namespace, **kwd):
...     print(name, bases, namespace, kwds)
...     return type(name, bases, namespace, **kwds)
... 
>>> class C(metaclass=logging_meta):
...     a = 1
... 
C () {'__module__': '__main__', '__qualname__': 'C', 'a': 1} {}
>>> issubclass(logging_meta, type)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: issubclass() arg 1 must be a class

即,答案是&#34;任何可调用的,例如,具有__call__()方法的类接受与type()相同的参数并返回类对象将执行&#34;:

>>> class C(metaclass=lambda *a: lambda *a: None): pass
... 
>>> C()
>>> type(C)
<class 'function'>