我正在将我拥有的项目从globals
迁移到实际拥有由单独模块中定义的类定义的结构。这是我第一次真正使用OOP,所以想要确保我正确理解范围,因为我选择的Python编辑器(VS Code)没有正确地执行自动完成/智能感知。
在我的代码顶部,我导入了我的模块 -
import NHLGameEvents
我在代码的主要部分创建了我的对象 -
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()
- 我如何确保代码中的其他方法可以访问这些类实例?答案 0 :(得分:1)
首先,我应该指出函数是用def
声明的函数,而方法类似于函数,但它存在于类中。
1 - 是的,它应该能够访问游戏。在python中,只要不更改其值,就可以访问较高级别的变量。如果在函数内部设置变量的值,则只能在该函数内部访问它。
a = 1
def my_function():
print(a) # Prints 1 when called
a = 2
print(a) # Prints 2 when called
print(a) # Prints 1
但是,我建议您始终将函数内部所需的值作为参数传递。更清洁,并通过删除全局范围避免副作用。
2 - 您无法从另一个函数访问函数的值,无论它是main
还是其他名称。但是,只要第二个函数位于第一个函数内,您就可以从另一个函数访问函数的值。例如:
def first_function():
a = 1
def second_function():
print(a) # Prints 1
def my_function():
prints(a) # Error, because 'a' does not exist in this scope.