获取基类的所有子类作为基类的class属性

时间:2018-09-13 06:18:01

标签: python python-3.5

给出一个继承自抽象类的类 ,我希望能够获得其所有子类,但是要从该类之内获取 本身。

我已经成功创建了一个@classmethod

>>> Eukaryota.get_subtypes()
[<class '__main__.Plantae'>, <class '__main__.Fungi'>]

但是有没有办法我可以使用@property或通过class属性来做到这一点?

>>> 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

1 个答案:

答案 0 :(得分:1)

您可以使用descriptor class

class get_subclasses:
    def __get__(self, obj, objtype):
        return objtype.__subclasses__()

class Eukaryota(Kingdom):
    subtypes = get_subclasses()

以便Eukaryota.subtypes将返回:

[<class '__main__.Plantae'>, <class '__main__.Fungi'>]