Home > Software design >  How to define type 'a child class of' in python?
How to define type 'a child class of' in python?

Time:01-10

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

  •  Tags:  
  • Related