我感觉自己喜欢网络编程,线程和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()以查看它是否有效,但它没有。)
我该如何解决这个问题?在涉及线程和面向对象时,我是新手。
提前致谢!
答案 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)
等