Учитывая класс , унаследованный от абстрактного класса , я хотел бы иметь возможность получить все его подклассы, но внутри самого класса .
Мне удалось создать @classmethod
, сделав так:
>>> Eukaryota.get_subtypes()
[<class '__main__.Plantae'>, <class '__main__.Fungi'>]
но есть ли способ, которым я мог бы сделать это, используя @property
или через атрибут класса?
>>> Eukaryota.subtypes
[<class '__main__.Plantae'>, <class '__main__.Fungi'>]
(Кажется, что свойства предназначены только для экземпляров класса, а не для самого класса.)
Вот тот, у которого @classmethod
(используется таксономия):
from abc import ABCMeta, abstractmethod
class Kingdom(object):
__metaclass__ = ABCMeta
@classmethod
@abstractmethod
def get_subtypes(cls):
pass
class Prokaryota(Kingdom):
@classmethod
def get_subtypes(cls):
return cls.__subclasses__()
class Eukaryota(Kingdom):
@classmethod
def get_subtypes(cls):
return cls.__subclasses__()
class Bacteria(Prokaryota):
pass
class Plantae(Eukaryota):
pass
class Fungi(Eukaryota):
pass