我对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??
我需要从move
bot
对象中的track.py
值
这可能吗?
我该怎么办?
---- -----更新
我知道这个例子的情况真的很奇怪......
其实我正在研究python-telegram-bot的commandHandler,
请原谅我跳过很多细节,
因为我认为我的问题与telegram
自我问题没有关联。
如果我浪费你的时间,我道歉......
答案 0 :(得分:0)
正如jonrsharpe在评论中所提到的,以下内容将引发ImportError
。
from main import bot
相反,我们必须导入类然后在新文件中创建对象。
from main import myRobot
bot = myRobot()
def howFar():
return bot.move
print(howFar())
<强>输出强>
0
答案 1 :(得分: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
答案 2 :(得分:0)
第一部分是从main.py移动class myRobot
说robot.py
(或myrobot.py
)。
接下来将取决于你的程序是如何编写的。不太理想的是将robot.py中的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
是一个变量。