Есть два простых способа найти экземпляры метакласса. Один из них заключается в том, чтобы метакласс отслеживал список своих экземпляров по мере их создания следующим образом:
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'>]
.
Другой способ - использовать
осмотрите модуль , чтобы просмотреть классы, скажем, в данном модуле, и используйте isinstance
, чтобы проверить, являются ли они экземплярами MType
. Это не обязательно сумасшедшая вещь - например, различные комплекты модульного тестирования работают, просматривая модуль для классов и функций, которые кажутся тестами, основанными на их именах и / или унаследованных классах - я не но я действительно уверен, почему вы захотите сделать это с метаклассом.