class MType(type):
pass
class MClass(object):
__metaclass__ = MType
a = MType
无论如何,从上面的代码片段中可以创建给定
MClass
的a
实例?(可能很重要的一点是,我无法简单地构造
MClass()
) 最佳答案
我可以想到两种简单的方法来查找元类的实例。一种是让元类在创建实例时跟踪其实例列表,如下所示:
class MType(type):
instances = [] #list of instances of the metaclass
def __init__(cls, name, bases, dct):
MType.instances.append(cls) #append to list of instances
super(MType, cls).__init__(name, bases, dct)
class MClass(object):
__metaclass__ = MType
现在
MType.instances
是[<class '__main__.MClass'>]
。另一种方法是使用
inspect module浏览给定模块中的类,并使用
isinstance
检查它们是否为MType
的实例。这也不一定是一件疯狂的事情-例如,各种单元测试套件通过基于模块的名称和/或继承的类,通过查找似乎是测试的类和函数的模块来工作-我不是我确实确定为什么要使用元类来做到这一点。