python从较低级别的类访问高层的变量

时间:2018-09-28 05:54:40

标签: python

我在这样的课程中有一个课程:

class Robot(object):
      def __init__(self):
         self.name = 'ganken'
       class Speaker(object):
          pass

假设我要从发言人访问Robot.name,该怎么做

3 个答案:

答案 0 :(得分:1)

您可以将Speaker设为Robot的子类:

class Robot(object):
    def __init__(self):
        self.name = 'ganken'

class Speaker(Robot):
    def get_name(self):
        return self.name

创建Speaker的实例时,它现在将具有关联的名称ganken。

s = Speaker
s.get_name()

输出:

'ganken'

您还可以调用s.name,并且它仍然会返回'ganken',但是通常您想在类中定义函数以获取和设置类的不同属性(查找getter和setter)如果您需要更多信息)。


我可能误解了您的问题。如果要访问Speaker类中的Robot类实例的名称(并不一定要使Speaker为Robot的子类),则可以将类定义为:

class Robot(object):
    def __init__(self):
        self.name = 'ganken'

class Speaker(object):
    def get_robot_name(self, robot):
        return robot.name

请注意,在此示例中,您可以将机器人实例传递到get_robot_name函数中。

演示:

r = Robot()
s = Speaker()
s.get_robot_name(r)

'ganken'

答案 1 :(得分:1)

如果您正在寻找嵌套类解决方案,则可以尝试以下方法在Robot类中创建扬声器对象。但是我不知道您这样做的原因是什么。

Python3 环境下尝试以下操作:

class Robot(object):
    def __init__(self):
        self.name = 'ganken'
        self.speaker = self.createSpeaker()

    def createSpeaker(self):
        return Robot.Speaker(self)

    class Speaker:
        def __init__(self,robot):
            self.robot = robot
        def say_name(self):
            return f'Name: {self.robot.name}'

robot = Robot()
print(robot.speaker.say_name())

答案 2 :(得分:0)

请尝试以下操作:

print(Robot().name)

先调用它然后访问它

输出为:

ganken