gpt4 book ai didi

扩展 SocketServer.TCPServer 时出现 Python "instance has no attribute"错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:30 26 4
gpt4 key购买 nike

我正在尝试覆盖 serve_forever SocketServer.TCPServer 的方法类(class)。但是我得到一个 AttributeError: MyServer instance has no attribute '_MyServer__is_shut_down'错误。

__is_shut_downSocketServer.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()

最佳答案

根据定义,以两个下划线开头的变量是给定类的“私有(private)”变量。实际上,这意味着 Python 通过添加下划线、后跟定义类名和实际变量名来破坏变量名。

所以在SocketServer.BaseServer中定义的__is_shut_down,实际上叫做_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__']

关于扩展 SocketServer.TCPServer 时出现 Python "instance has no attribute"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21863391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com