簡體   English   中英

在Python中,如何從其他模塊訪問在主模塊中創建的實例?

[英]In Python, how can I access an instance created in main module from other module?

我對OOP和Python不太了解...

這是關於我的問題的示例:

我的主模塊中有一個類對象

# main.py
#---------

class MyRobot():

    def __init__(self):
        self.move = 0

    def walk(self):
        self.move += 5

    def botInfo(self):
        # In my case,
        # I can only address track.howFar to my main module
        import track
        getInfo = track.howFar
        print getInfo()


if __name__ == '__main__':
    bot = MyRobot()
    bot.walk()
    bot.botCMD()

並有另一個模塊

# track.py
#---------
def howFar():
    return bot.move # How??

我需要從track.py獲取bot對象中的move

可以嗎?

我該怎么辦??

----更新-----

我知道這種情況真的很奇怪...

實際上,我正在對python-telegram-bot的commandHandler進行一些研究,

請原諒我跳過很多細節,

因為我認為我的問題與telegram本身並沒有太大關系。

如果您浪費時間,我表示歉意。

正如jonrsharpe在評論中提到的,以下內容將引發ImportError

from main import bot

相反,我們必須導入類, 然后在新文件中創建對象。

from main import myRobot

bot = myRobot()    

def howFar():
    return bot.move

print(howFar())

輸出量

0
import main
bot = main.myRobot() # bot.move

from main import myRobot
bot = myRobot() # bot.move

def howFar(robot_instance):
    return robot_instance.move

howFar(bot) # passing instance

第一部分是將class myRobot中的robot.py (或myrobot.py )。

接下來將取決於程序的編寫方式。 不太理想的是將class myRobot中的myRobot class myRobot的實例分配給全局變量,然后可以從導入該模塊的所有內容中獲取該變量。

也許第二不那么理想的是擁有一個像

class myRobot():
    _my_robot = None

    @classmethod
    def MakeRobot(cls):
        if cls._my_robot is None:
            cls._my_robot = cls() #cls is `class myRoboto`

        return cls._my_robot

從那里您可以一次調用myRobot.MakeRobot()創建一個新實例,隨后對MakeRobot()的任何調用都將返回相同的實例。

在腳本的實際主要功能中,更理想的解決方案是創建一個myRobot實例,並將其傳遞到需要的地方。

def run_program():
    robot = myRobot()

    while True: #or however your script runs
        #do robot move logic
        howFar(robot)

無關,我建議始終按照大寫的約定將類名大寫,以告訴其他人MyRobot是類,而myRobotmy_robot是變量。

暫無
暫無

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

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