try: reg_sci = bytearray([85, 90, 4, 230, 128, 0, 25]) parent_serial = super().get_serial() parent_serial.write(reg_sci) d = parent_serial.read(3) DataLength = d[2] d = parent_serial.read(DataLength) DIFF_R = d[2] * 256 + d self.textEdit_dir_r.setText(DIFF_R) except Exception as e: print(e)报错'Child' object has no attribute 'serial'
时间: 2024-02-14 15:13:10 浏览: 295
ACT_GE_BYTEARRAY.sql
根据你的代码以及之前的描述,我猜测你在父类 `Parent` 中定义了一个名为 `_serial` 的属性用于存储串口对象,然后在子类 `Child` 中调用了父类的方法来使用这个串口对象。但是在子类中调用父类方法时,出现了 `'Child' object has no attribute 'serial'` 错误,这是因为子类没有定义名为 `serial` 的属性。
解决这个问题的方法是,在子类中定义一个名为 `_serial` 的属性,用于保存串口对象,并在父类中的 `get_serial()` 方法中返回这个属性。例如:
```python
class Parent:
def __init__(self):
self._serial = Serial(...) # 父类中的串口对象
def get_serial(self):
return self._serial # 返回父类中的串口对象
class Child(Parent):
def __init__(self):
super().__init__()
self._serial = Serial(...) # 子类中的串口对象
def use_parent_serial(self):
parent_serial = super().get_serial() # 调用父类方法获取串口对象
parent_serial.write(...) # 使用父类中的串口对象
child = Child()
child.use_parent_serial()
```
在这个例子中,父类中保存了一个名为 `_serial` 的属性,用于存储串口对象。在子类中,我们也定义了一个名为 `_serial` 的属性,用于保存子类中的串口对象。在子类的方法中,我们通过调用 `super().get_serial()` 方法来获取父类中的串口对象,并使用它进行操作。这样就可以避免属性名冲突的问题了。
阅读全文