繁体   English   中英

有关类及其方法的问题

[英]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 ,并将其添加到实例-这意味着connectself所做的操作, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM