In the following example, the list1 attribute of P represents a list of instances of A.
class A:
value1: str
class B(A):
value2: str
class P:
list1: List[A]
I want is to keep a list of child classes of A (not instances of A) in the variable list1. Is there a way to do it in python?
CodePudding user response:
...
class P:
A.__subclasses__()
>>> [<class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>]
subclasses - Returns a list of weak references to classes directly inherited from this one. enter link description here
CodePudding user response:
my try copying from first answer here :How to find all the subclasses of a class given its name? :
class klass():
pass
class popo(klass):
pass
class pepe(klass):
pass
class P():
def __init__(self):
self.list1 = []
pass
def get_all_subclasses(self, cls):
for subclass in cls.__subclasses__():
self.list1.append(subclass)
return list(set(subclass_list))
print(get_all_subclasses(klass),'\n')
print(type(get_all_subclasses(klass)),'\n')
class papa(klass):
pass
class coco(popo):
pass
print(get_all_subclasses(klass),'\n')
output:
[<class '__main__.pepe'>, <class '__main__.popo'>]
<class 'list'>
[<class '__main__.coco'>, <class '__main__.pepe'>, <class '__main__.papa'>, <class '__main__.popo'>]
