i have a python script that contains the following classes and subclasses,
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def process(self):
pass
class B(A):
result= []
def process(self):
...code...
return result
class C(A):
result= []
def process(self):
...code...
return result
class D(A):
result= []
def process(self):
...code...
return result
so, each subclass of the abstract class A, does some process and appends the output to the 'result' list and then the 'process' function returns the result. I would like to know if there is a way to instantiate all subclasses and the function in these classes to be able to have access to return the results from the function for all subclasses in a list of lists.
I have looked at some answers in this post Python Instantiate All Classes Within a Module, but using the answers there I only get to substantiate the subclasses and do not know how to substantiate the 'process' function.
The hard part was to find all the subclasses, because it uses the less known __subclasses__
special method. From that it is straightforward: instanciate an object for each subclass and call the process method on it:
final_result = [] # prepare an empty list
for cls in A.__subclasses__(): # loop over the subclasses
x = cls() # instanciate an object
final_result.append(x.process()) # and append the result of the process method
But the Pythonic way would be to use a one line comprehension
final_result = [cls().process() for cls in A.__subclasses__()]