gpt4 book ai didi

python - 获取一个基类的所有子类作为基类的class属性

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:11 24 4
gpt4 key购买 nike

给定一个继承自抽象类的类,我希望能够获取它的所有子类,但从类中本身。

我已经设法创建了一个 @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

最佳答案

您可以使用 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'>]

关于python - 获取一个基类的所有子类作为基类的class属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52307665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com