Словарь подклассов классов - PullRequest
2 голосов
/ 26 апреля 2011

Есть ли способ составить словарь всех наследований классов?

Что-то вроде

 class MagikClass :

       pass

 class A(MagikClass) :

       __name__ = "A"

 print magik_dict # -> { "A": A }

1 Ответ

4 голосов
/ 26 апреля 2011

Вот решение, которое добавляет атрибут _derived к каждому классу, содержащий производные классы этого класса:

class Meta(type):
    def __new__(cls, name, bases, dict_):
        new_class = type.__new__(cls, name, bases, dict_)
        new_class._derived = {}
        if isinstance(bases[0], Meta):
            bases[0]._derived[name] = new_class
        return new_class

class Magic(object):
    __metaclass__ = Meta

class A(Magic):
    pass

class B(Magic):
    pass

print Magic._derived

печать

{'A': <class '__main__.A'>, 'B': <class '__main__.B'>}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...