如何在不实例化类的情况下读取另一个文件中的实例变量?

1 投票
1 回答
2680 浏览
提问于 2025-04-17 17:44

我刚接触Python,遇到了一些麻烦,想把一个变量导入到另一个类里用。我查了好几个相关的问题,试着让它工作,但感觉我一开始设置程序的方式可能有问题。我来简化一下情况,这样读起来会轻松点...

Server.py:

import Game
class Server():
    def __init__(self):
        # Server connection details here
        self.test = 5
        self.game = Game()

    def serve(self):
        # Client processing, etc.
        self.game.game_loop()

if __name__ == "__main__":
    server = Server()
    server.serve()

Game.py:

class Game():
    def __init__(self):
        # Other variables...

    def game_loop(self):
        # To reference server's instance variables
        from Server import server

        print test

在这个例子中,我想从Server的服务器实例中引用一个叫“test”的变量。值得一提的是,如果我把这两个类放在同一个文件里,然后把最后的if语句去掉,这样是可以工作的……但我不想让文件变得那么长 :)

因为这两个文件是分开的,所以我不能在不去掉Server.py中的if语句的情况下获取“server”的实例变量。当我去掉它时,会因为我在做的其他事情而出现socket错误……我需要确保只有一个服务器对象(而且它的类只“调用”一次),但能在不每次都把这些实例变量传给我的Game类的情况下引用它们,这样会方便很多...

这部分确实是我自己设置程序时搞错了……但我已经走得太远,不能从头开始。有没有办法让我在这种设置下读取这些变量呢?

1 个回答

4

首先,test 是一个 实例 变量,所以你需要把一个 Server实例 传递给你的游戏循环:

class Server:
  def serve(self):
    # Client processing, etc.
    self.game.game_loop(self)

接下来,你可以通过查看传入的实例,在 game_loop 中找到 test

class Game:
  def game_loop(self, server):
    print server.test

撰写回答