【发布时间】:2019-12-05 01:01:40
【问题描述】:
我想定义一个继承自另一个抽象类的抽象类。
class DataBuffer(ABC):
def __init__(self):
self.buffered_data = {}
class IMUDataBuffer(ABC, DataBuffer):
def __init__(self):
super(IMUDataBuffer, self).__init__()
def update(self, message):
timestamp = message['ts']
x_val, y_val, z_val = message[self.message_key]
self.buffered_data[timestamp] = (x_val, y_val, z_val)
class GyroscopeDataBuffer(IMUDataBuffer):
def __init__(self):
super(GyroscopeDataBuffer, self).__init__()
self.message_key = 'gy'
class AccelerometerDataBuffer(IMUDataBuffer):
def __init__(self, message):
super(AccelerometerDataBuffer, self).__init__()
self.message_key = 'ac'
在这个例子中,IMUDataBuffer 应该从 DataBuffer 继承方法,但它本身永远不会被实例化,因此应该是一个抽象类。
这是我使用上述代码收到的错误:
TypeError: Cannot create a consistent method resolution order (MRO) for bases ABC, DataBuffer
作为一种廉价的解决方法,我可以在 IMUDatabuffer 中定义一个 message_key,但这对我来说感觉很草率,因为实际上 IMUDataBuffer 不应该有 message_key 属性。
class IMUDataBuffer(DataBuffer):
def __init__(self):
super(IMUDataBuffer, self).__init__()
self.message_key = None
这里处理继承的正确方法是什么?
【问题讨论】:
标签: python abstract-class multiple-inheritance