Python类实例范围(& VS代码自动完成)

时间:2018-01-29 03:09:28

标签: python oop autocomplete

我正在将我拥有的项目从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

我对上述代码有两个问题 -

  1. 在我的get_game_events()方法中,我是否应该根据定义的范围访问game.live_feed?我的代码正确执行,但是在输入game.语句后,我没有获得自动完成功能。
  2. 如果我应该在单独的方法中定义对象,例如main() - 我如何确保代码中的其他方法可以访问这些类实例?

1 个答案:

答案 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.