在Python中,有没有一种方法可以确定一个类对象是否是元类?
我知道你可以使用等号运算符进行检查。 元类 == type
但这并不适用于用户定义的元类。
在Python中,有没有一种方法可以确定一个类对象是否是元类?
我知道你可以使用等号运算符进行检查。 元类 == type
但这并不适用于用户定义的元类。
测试对象是否为type
子类:
issubclass(MetaClass, type)
这将对所有元类, 包括 type
本身返回 True
。
演示:
>>> class Meta(type): pass
...
>>> class Foo(object): pass
...
>>> issubclass(Meta, type)
True
>>> issubclass(Foo, type)
False
大多数元类都是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
__call__()
方法的类,它接受与type()
相同的参数并返回一个类对象即可”:>>> class C(metaclass=lambda *a: lambda *a: None): pass
...
>>> C()
>>> type(C)
<class 'function'>
class
语句中使用metaclass
(它不是构造函数)。Python 2使用__metaclass__
属性(在类或模块上)。 - jfstype
对象具有相同 API 的对象。 - chepner