python: 实例化模块中的所有子类及其函数输出
python: instaintiate all subclasses in a module along with their function output
我有一个 python 脚本,其中包含以下 classes 和子 classes,
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
因此,抽象 class A 的每个子 class 都会进行一些处理并将输出附加到 'result' 列表,然后 'process' 函数 returns 结果。我想知道是否有一种方法可以实例化所有子 classes 和这些 classes 中的函数,以便能够访问 return 所有函数的结果subclasses 在 list of lists.
中
我看过这个 post 中的一些答案,但是使用那里的答案我只能证实子 classes 而不知道如何证实'process' 函数。
困难的部分是找到所有的子类,因为它使用了鲜为人知的 __subclasses__
特殊方法。由此很简单:为每个子类实例化一个对象并在其上调用 process 方法:
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
但是 Pythonic 的方法是使用单行理解
final_result = [cls().process() for cls in A.__subclasses__()]
我有一个 python 脚本,其中包含以下 classes 和子 classes,
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
因此,抽象 class A 的每个子 class 都会进行一些处理并将输出附加到 'result' 列表,然后 'process' 函数 returns 结果。我想知道是否有一种方法可以实例化所有子 classes 和这些 classes 中的函数,以便能够访问 return 所有函数的结果subclasses 在 list of lists.
中我看过这个 post
困难的部分是找到所有的子类,因为它使用了鲜为人知的 __subclasses__
特殊方法。由此很简单:为每个子类实例化一个对象并在其上调用 process 方法:
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
但是 Pythonic 的方法是使用单行理解
final_result = [cls().process() for cls in A.__subclasses__()]