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

时间:2011-10-30 01:58:53

标签: python multithreading class variables

我感觉自己喜欢网络编程,线程和OOP技能。我遇到了一个问题。 我有一个名为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 个答案:

答案 0 :(得分:3)

你需要调用一个可以传递给PONG构造函数的IRC类的实例:

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)