<p>首先,您可能希望方法<code>get_data</code>返回</em>数据,而不是<em>打印</em>它(否则它将自己进行可视化)。这可能是你想要的。下面的代码将计算出<code>IDataStream</code>的所有子类,实例化类的实例(如果它不是抽象类),调用实例上的方法<code>get_data</code>,并将返回值附加到<code>list</code>中:</p>
<pre><code>#!/usr/bin/env python3
from abc import ABC, abstractmethod
class IDataStream(ABC):
@abstractmethod # you probably ment to add this
def get_data(self):
pass
class IMUDataStream(IDataStream):
def __init__(self):
self.__text = "this is IMU data"
def get_data(self):
return self.__text
class GPSDataStream(IDataStream):
def __init__(self):
self.__text = "this is GPS data"
def get_data(self):
return self.__text
def is_abstract(cls):
return bool(getattr(cls, "__abstractmethods__", False))
def get_all_non_abstract_subclasses(cls):
all_subclasses = []
for subclass in cls.__subclasses__():
if not is_abstract(subclass):
all_subclasses.append(subclass)
all_subclasses.extend(get_all_non_abstract_subclasses(subclass))
return all_subclasses
class DataVisualizer:
def __init__(self):
data = [cls().get_data() for cls in get_all_non_abstract_subclasses(IDataStream)]
print(data)
dv = DataVisualizer()
</code></pre>
<p>印刷品:</p>
<pre><code>['this is IMU data', 'this is GPS data']
</code></pre>