在Python中在两个类之间共享变量

1 投票
1 回答
2719 浏览
提问于 2025-04-17 05:16

我最近想提升一下我的网络编程、线程和面向对象编程的技能。不过我遇到了一个问题。

我有一个叫做IRC的类,还有一个叫做Pong的类。我想用IRC来做一些事情,比如连接服务器、发送消息等等。而Pong我想用作一个后台线程,用来检查是否有包含“PING”的消息。

class IRC:
    def Connect(self):
        try:
            HOST = sys.argv[1]
            PORT = sys.argv[2]
        except IndexError:
            print "Usage: "+sys.argv[0]+" [server] [port]\n"
            sys.exit(1)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((HOST, PORT))

class Pong(threading.Thread):
    def Pong(self):
        while 1:
            IRC.s.send("Test") # IRC has no attribute 's'

需要注意的是,上面的代码是简化过的,只是为了测试。我的问题是,如何在一个类中使用另一个类的变量。变量s是在IRC类中声明和定义的,但在Pong中也需要用到。

解释器提示说IRC类没有属性's'(我试过先调用Connect()方法,用一个示例变量来看看是否能工作,但没有成功)。

我该怎么解决这个问题呢?我对线程和面向对象编程还很陌生。

谢谢大家的帮助!

1 个回答

3

你需要创建一个IRC类的实例,然后把它传递给PONG构造函数:

class IRC:
    def Connect(self):
        try:
            HOST = sys.argv[1]
            PORT = sys.argv[2]
        except IndexError:
            print "Usage: "+sys.argv[0]+" [server] [port]\n"
            sys.exit(1)
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.connect((HOST, PORT))

class Pong(threading.Thread):
    def __init__(self,ircclass):
        self.myirc = ircclass
    def Pong(self):
        while 1:
            self.myirc.s.send("Test")

gIRC = IRC
gIRC.connect()
myPong = Pong(gIRC)

等等。

撰写回答