【发布时间】:2018-07-07 17:03:02
【问题描述】:
我正在将我的项目从被globals 乱扔垃圾迁移到实际具有由单独模块中定义的类定义的结构。这是我第一次真正使用 OOP,所以要确保我正确理解范围,因为我选择的 Python 编辑器(VS Code)没有正确执行自动完成/智能感知。
在我的代码顶部,我导入了我的模块 -
import NHLGameEvents
我在代码的 main 部分创建我的对象 -
if __name__ == '__main__':
game_info = is_game_today()
# Create a Game Object
gameobj_game_type = game_info["gameType"]
gameobj_date_time = game_info["gameDate"]
gameobj_game_state = game_info["status"]["abstractGameState"]
gameobj_venue = game_info["venue"]["name"]
gameobj_live_feed = game_info["link"]
gameobj_broadcasts = {}
gameobj_broadcasts[broadcast_team] = broadcast_channel
game = NHLGameEvents.Game(gameobj_game_type, gameobj_date_time, gameobj_game_state,
gameobj_venue, gameobj_live_feed, gameobj_broadcasts)
然后我有一个方法,我想记录该方法的一些属性 -
def get_game_events():
logging.info("Getting data from endpoint: %s", game.live_feed)
live_feed_json = requests.get(game.live_feed).json()
return live_feed_json
我对上面的代码有两个问题 -
- 在我的
get_game_events()方法中,我应该能够访问game.live_feed给定的范围吗?我的代码可以正确执行,但是一旦我输入game.语句,我就没有自动完成。 - 如果我应该在单独的方法(例如
main())中定义对象 - 如何确保我的代码中的其他方法可以访问这些类实例?
【问题讨论】:
-
get_game_events在哪里定义?它怎么知道game? -
get_game_events方法是在我正在编写的脚本的顶部定义的——我在其中导入了NHLGameEvents模块并包含上述所有代码。我的理解是,如果game = NHLGameEvents.Game(...)不包含在方法中,那么它就是全局范围的一部分,可以在其他任何地方引用。这是我的问题的一部分。 -
我不确定我是否理解第二个问题。你的意思是,如何访问 init 中声明的变量?
-
是的,
game正如您所定义的,它在全局范围内。我有点困惑,因为我以为您说您是在尝试摆脱全局变量! :-) 无论如何,我不知道 VS 是如何自动完成的。 -
@BrenBarn 我的意思是 global 关键字比什么都重要,但是如果我的对象是在单独的方法中定义的,我如何确保其他方法可以访问它 - 做我必须将其作为参数传递?
标签: python oop autocomplete