在Python中在两个类之间共享变量
我最近想提升一下我的网络编程、线程和面向对象编程的技能。不过我遇到了一个问题。
我有一个叫做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)
等等。