繁体   English   中英

Python3-导入和覆盖方法

[英]Python3 - import and override method

server.py我有两个类,类ServerClientThread带有方法processCmd 当我将此代码导入新的Proxy类时,我想覆盖此方法。 怎么做?

这是server.py:

class ClientThread( threading.Thread, socket.socket ):
    #(some code)
    def processCmd( self, cmd ):
        if 'quit' == cmd:
            self.writeline(str('Ok, bye'))
            QUIT = True
            done = True
        elif 'bye' == str(cmd):
            self.writeline(str('Ok, bye'))
            done = True
        else:
            print(cmd)
#
class Server:
    #(some code)
    def run( self ):
       self.sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
       self.sock.bind( ( '127.0.0.1', 5050 ) )
       new_thread = ClientThread( client )
       print('Incoming Connection. Started thread ', end=' ')
       self.thread_list.append( new_thread )
       new_thread.start()

在另一个文件中是主代码:

import server
#
class Proxy( server.Server):
    def processCmd( self, cmd ):
        if 'quit' == cmd:
            self.writeline(str('Another quit'))
            QUIT = True
            done = True
        elif 'bye' == str(cmd):
            self.writeline(str('Another bye'))
            done = True
        else:
            print(cmd)
    pass

您不能覆盖Server类中的processCmd方法。 您还必须导入ClientThread并将其子类化。

import server

class Proxy( server.Server):
    def run( self ):
       self.sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
       self.sock.bind( ( '127.0.0.1', 5050 ) )
       new_thread = CustomClientThread( client )
       print('Incoming Connection. Started thread ', end=' ')
       self.thread_list.append( new_thread )
       new_thread.start()
    pass

class CustomClientThread(server.ClientThread)
    def processCmd( self, cmd ):
        #override here

而且,如果您不想覆盖整个run方法,则应在基类中对其进行更改,以便可以将clientThread的类型设置在该方法的外面。

class Server:
    thread = ClientThread

    #(some code)
    def run( self ):
       self.sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
       self.sock.bind( ( '127.0.0.1', 5050 ) )
       new_thread = thread( client )
       print('Incoming Connection. Started thread ', end=' ')
       self.thread_list.append( new_thread )
       new_thread.start()

然后,子类看起来像这样,并且run方法保持不变。

class Proxy( server.Server):
    thread = CustomClientThread

如果要覆盖ClientThread方法,则可以覆盖为

class OverrideClientThread(server.ClientThread):
    def processCmd(self, cmd):
        # call super
        server.ClientThread.processCmd(self, cmd)
        #do something.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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