[英]Python3 - import and override method
在server.py
我有两个类,类Server
和ClientThread
带有方法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.