[英]A question regarding a class and it's methods
我目前正在尝试编写一个ircbot并被卡住。 如您所见,我为ircBot类connect方法定义了一个方法,该方法创建了一个套接字对象。 我想在sendCmd方法中使用此对象,这可能吗?
我一直在寻找google和stackoverflow,但无法找到解决方案(可能是因为我是Python的新手)。 任何提示表示赞赏!
import socket
import sys
import os
class ircBot:
def sendCmd(self, cmd):
SEND_TEXT_ON_OPEN_SOCKET
def connect(self, server, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c = s.connect_ex((server, port))
if c == 111:
print("Error: " + os.strerror(c))
sys.exit(1)
print("Making connection to " + server + "\n")
问候,
大卫
技巧是方法的第一个参数,通常在Python中称为self
。 调用方法时,将自动传递此参数。
它是该类的实例-因此,如果执行ircbot.sendCmd(cmd)
,则sendCmd
ircbot
用作self
,因此如果需要,可以将其自身用作self.sendCmd
。
您可以将属性添加到self
,并将其添加到实例-这意味着connect
对self
所做的操作, sendCmd
也会看到。
import socket
import sys
import os
class IrcBot: # You should consider doing 'class IrcBot(object):'
# if you're on Python 2, so it's a new-style class
def sendCmd(self, cmd):
# use self.s here
SEND_TEXT_ON_OPEN_SOCKET
def connect(self, server, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c = self.s.connect_ex((server, port))
if c == 111: # is this the only return code that matters?
# I don't know, you might want to check for others
print("Error: " + os.strerror(c))
sys.exit(1)
print("Making connection to " + server + "\n")
ircbot = IrcBot()
ircbot.connect('localhost', 6667)
ircbot.sendCmd('yourcmd')
您需要将其分配给可以在connect
外部访问的变量。 通常,这是通过创建称为成员级别变量的东西来完成的:
class ircBot:
def sendCmd(self, cmd):
# SEND_TEXT_ON_OPEN_SOCKET
s.doSomething()
def connect(self, server, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c = s.connect_ex((server, port))
if c == 111:
print("Error: " + os.strerror(c))
# this should probably simply throw an exception. No need to take teh
# whole system down on socket connection failure.
sys.exit(1)
self.s = s
# I moved this up a level because you could never get to it in the
# if statement -- sys.exit leaves the application!
print("Making connection to " + server + "\n")
import socket
import sys
import os
class ircBot:
def sendCmd(self, cmd):
if self.s is None:
raise "Not connected to a server"
self.s.send(cmd)
def connect(self, server, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c = self.s.connect_ex((server, port))
if c == 111:
print("Error: " + os.strerror(c))
sys.exit(1)
print("Making connection to " + server + "\n")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.