Python类实例作用域(和VS Code自动完成)

2024-05-23 19:49:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在迁移一个项目,使其不再充斥着globals,而是实际拥有一个由单独模块中定义的类定义的结构。这是我第一次真正使用OOP,所以我想确保我正确理解范围,因为我选择的Python编辑器(VS代码)没有正确执行autocomplete/Intellisense。你知道吗

在我的代码顶部,我导入了我的模块-

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

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

  1. 在我的get_game_events()方法中,如果给定了game.live_feed的定义范围,我应该能够访问它吗?我的代码执行正确,但一旦我键入game.语句,就不会自动完成。你知道吗
  2. 如果我应该在一个单独的方法(如main())中定义对象,那么如何确保代码中的其他方法可以访问这些类实例?你知道吗

Tags: 模块方法代码infogamelivejsonget
1条回答
网友
1楼 · 发布于 2024-05-23 19:49:44

首先,我应该指出函数是用def声明的函数,而方法类似于函数,但它存在于类中。你知道吗

是的,它应该可以进入游戏。在python中,只要不改变变量的值,就可以访问上层的变量。如果在函数内设置变量的值,则只能在该函数内访问该变量。你知道吗

a = 1

def my_function():
    print(a) # Prints 1 when called
    a = 2
    print(a) # Prints 2 when called

print(a) # Prints 1

但是,我建议您始终将函数中需要的值作为参数传递。更干净,并通过删除全局范围来避免副作用。你知道吗

你不能从另一个函数中访问函数的值,不管它叫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.

相关问题 更多 >