class DataMachineA:
def __init__(self):
# some dummy data
self.data = {"type": ["A", "A", "B", "B"],
"value": [1, 2, 3, 4],
"description": ["text1", "text2", "text2", "text3"],
"duration": [5, 6, 7, 8]}
def get_data(self, i):
return self.data["duration"][i], self.data["type"][i], self.data["value"][i]
DataMachineB 类: def init(自身): # 一些虚拟数据 self.data = {“类型”:[“D”,“C”,“D”,“C”], “测量”:[10,20,30,40], “时间”:[50,60,70,80]}
def fetch(self, i):
return self.data["time"][i], self.data["measurement"][i], self.data["type"][i]
类适配器(DataMachineA,DataMachineB):
def __init__(self,adaptee):
self.adaptee = adaptee
def retrieve(self, i):
self.adaptee.fetch(i)
self.adaptee.get_data(i)
return self.adaptee["duration"][i], self.adaptee["type"][i], self.adaptee["value"][i]
由于
DataMachineA
和 DataMachineB
共享相同的 data
属性,但初始化方式不同,因此两个类的多重继承将导致一个 __init__
方法覆盖由另一个 data
方法初始化的 __init__
方法.
我建议
Adapter
类使用 DataMachineA
和 DataMachineB
实例的组合来代替:
class Adapter:
def __init__(self):
self.a = DataMachineA()
self.b = DataMachineB()
def retrieve(self, i):
return (
self.a["type"][i], self.a["duration"][i],
self.b["type"][i], self.b["value"][i]
)