给出一个继承自抽象类的类 ,我希望能够获得其所有子类,但是要从该类之内获取 本身。
我已经成功创建了一个@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
答案 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'>]