gre*_*ole 3 python socketserver
我正在尝试覆盖该类的serve_forever方法SocketServer.TCPServer。但是我收到一个AttributeError: MyServer instance has no attribute '_MyServer__is_shut_down'错误。
__is_shut_down在实现SocketServer.BaseServer类,应该通过被初始化__init__()的SocketServer.TCPServer。我想念什么?
import SocketServer
class MyServer(SocketServer.TCPServer):
def __init__(self, server_address, RequestHandlerClass):
SocketServer.TCPServer.__init__(self, server_address,
RequestHandlerClass)
def serve_forever(self, poll_interval=0.5):
self.__is_shut_down.clear()
try:
while not self.__shutdown_request:
print "SOMETHING"
r, w, e = _eintr_retry(select.select, [self], [], [],
poll_interval)
if self in r:
self._handle_request_noblock()
finally:
self.__shutdown_request = False
self.__is_shut_down.set()
Run Code Online (Sandbox Code Playgroud)
根据定义,以两个下划线开头的变量是给定类的“私有”变量。实际上,这意味着Python通过添加下划线,后跟定义的类名和实际的变量名来修饰变量名。
因此__is_shut_down,SocketServer.BaseServer实际上定义为_BaseServer__is_shut_down。
您是否应该实际使用它是另一个问题,因为BaseServer显然是不打算使用它的作者。
一个例子:
class A(object):
def __init__(self):
self.__my_variable = 1
a = A()
dir(a)
['_A__my_variable', <== mangled variable name
'__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |