如何在内部类中访问外部属性类?

问题描述 投票:-1回答:1

我通过使用类并遵循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()
python
1个回答
1
投票

Identify并不只是从内部定义而继承自Device。如果希望它继承Device的子类,则需要明确地写成:

class Identify(Device):
    . . .

问题是inner class can't inherit from an outer class。您需要将IdentifyDevice一起设置为顶级类。

class Device:
   . . .

class Identify(Device):
   . . .

如果您的意图是使Identify稍微隐蔽一些或表明它是实现的详细信息,则可以通过在名称前加一个下划线将其命名为““” private“”“。

class _Identify(Device):
   . . .

这实际上并不能阻止外部访问,但是如果它是在外部导入或使用的,则确实会引起IDE警告,and causes it to be excluded from wildcard imports

_ single_leading_underscore:“内部使用”指标较弱。例如。从M import *不导入名称以下划线开头的对象。

© www.soinside.com 2019 - 2024. All rights reserved.