为什么在类(python)中找不到对象

2024-09-28 17:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

class TCPHandler(socketserver.BaseRequestHandler):
    def setup(self):    
        self.packer = MessagePacker.MessagePacker()
        self.parser = MessageParser.MessageParser()

    def handle(self):        
        self.setup()
        while True:
            pass
            #blabla...

class FroggerServer(threading.Thread):
    def init(self,ip,nickname):
        self.serverIp = ip
        self.serverPort = 10000
        self.nickname = nickname
        self.tcpHandler = TCPHandler
        tuple = (self.serverIp,self.serverPort)               
        self.__serverSocket = socketserver.TCPServer(tulpe,self.tcpHandler)

    def run(self):
        self.__serverSocket.serve_forever()

我先用插座,然后再清除TCPHandler。 问题是在TCPHandler中找不到“packer”、“parser”。你知道吗

对每个人来说,就像这样。你知道吗

server = FroggerServer()
server.init(ip,nickname)
server.start()
server.parser.putMessage(43)  #oops. not exist object parser in server object

我认为self.tcpHandler = TCPHandler中有问题,如果我不使用这种方式,我如何访问这个类外部的TCPHandler中的对象


Tags: selfipparserserverdefsetupnicknameclass
1条回答
网友
1楼 · 发布于 2024-09-28 17:25:21

你可以这样做。你知道吗

class TCPHandler(socketserver.BaseRequestHandler):
    def setup(self):    
        self.packer = MessagePacker.MessagePacker()
        self.parser = MessageParser.MessageParser()

    def handle(self):        
        self.setup()
        # your code

    def getPacker():
        return self.packer

    def getParser():
        return self.parser

class FroggerServer(threading.Thread):
    def init(self,ip,nickname):
        # your code

    def run(self):
        self.__serverSocket.serve_forever()

    def getTCPHandler():
        return self. tcpHandler

然后你可以做:

server = FroggerServer()
server.init(ip,nickname)
server.start()
server.getTCPHandler().getParser().putMessage(43) 

替代方法:您也可以执行以下操作。你知道吗

class TCPHandler(socketserver.BaseRequestHandler):
    def __init__(self):    
        self.packer = MessagePacker.MessagePacker()
        self.parser = MessageParser.MessageParser()

    def handle(self):
        while True:
            pass
            #blabla...

class FroggerServer(threading.Thread):
    def __init__(self, ip, nickname):
        self.serverIp = ip
        self.serverPort = 10000
        self.nickname = nickname
        self.tcpHandler = TCPHandler()
        tuple = (self.serverIp, self.serverPort)               
        self.__serverSocket = socketserver.TCPServer(tulpe, self.tcpHandler)

    def run(self):
        self.__serverSocket.serve_forever()

现在创建服务器对象,如下所示。现在可以访问TCPHandler类的变量parser。你知道吗

server = FroggerServer(ip, nickname)
server.start()
server.tcpHandler.parser.putMessage(43)

Why the above will work?

假设你有下面的课。你知道吗

class Example(object):
      def doSomething(self):
          self.othervariable = 'instance variable'

>> foo = Example()

这里我们创建了一个Example的实例,但是如果我们尝试访问othervariable,我们将得到一个错误:

>> foo.othervariable
AttributeError: 'Example' object has no attribute 'othervariable'

因为othervariable是在doSomething内赋值的,我们还没有调用它,所以它不存在。你知道吗

>> foo.doSomething()
>> foo.othervariable
'instance variable'

请注意,__init__是一种特殊的方法,每当发生类实例化时,它都会自动被调用。你知道吗

class Example(object):
      def __init__(self):
          self.othervariable = 'instance variable'

>> foo = Example()
>> foo.othervariable
'instance variable'

引用:https://stackoverflow.com/a/16680307/5352399

相关问题 更多 >