簡體   English   中英

python從低級類訪問高級變量

[英]python accessing variable of high level from lower level class

我在這樣的班級中有一個班級:

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

假設我想從 Speaker 訪問Robot.name ,我該怎么做

您可以使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'

如果您正在尋找嵌套類解決方案,您可以嘗試以下方法,在 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())

試試下面的:

print(Robot().name)

只需調用它然后訪問它

輸出是:

ganken

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM