我通过使用class并遵循javascript样式来将代码重构为更具可读性。该类是关于调制解调器设备的。在下面,我有2个内部类,即SMS和Identify。目前,它专注于检索设备信息。出现错误的问题
'Identify' object has no attribute 'handle'
内部类无法访问外部属性类。
import serial
class Device:
def open(self, port, baudrate):
self.handle = serial.Serial(port, baudrate)
def readline(self):
return self.handle.readline()
def close(self):
self.handle.close()
class SMS:
pass
class Identify:
def manufacturer(self):
self.handle.write(b'AT+CGMI\r')
while True:
buffer = self.handle.readline()
print(buffer)
if buffer == b'OK\r\n':
break
elif buffer == b'ERROR\r\n':
break
device = Device()
device.open('COM12', 9600)
device.Identify().manufacturer()
device.close()
答案 0 :(得分:2)
Identify
不能仅从Device
中进行定义而继承。如果希望它继承Device
的子类,则需要明确地写成这样:
class Identify(Device):
. . .
问题是inner class can't inherit from an outer class。您需要将Identify
与Device
一起设置为顶级课程。
class Device:
. . .
class Identify(Device):
. . .
如果您的意图是使Identify
稍微隐蔽一些或表明它是实现细节,则可以通过在名称前加一个下划线将其命名为““ private”“”:
class _Identify(Device):
. . .
这实际上并不能阻止外部访问,但是如果它是在外部导入或使用的,and causes it to be excluded from wildcard imports确实会引起IDE警告:
_single_leading_underscore:“内部使用”指标较弱。例如。从M import *不会导入名称以下划线开头的对象。