![](/img/trans.png)
[英]In Python, how can I access the namespace of the main module from an imported module?
[英]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
是類,而myRobot
或my_robot
是變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.