'Class' 属性没有属性 'variable'
'Class' Attribute has no attribute 'variable'
我知道此类问题已经被经常提出。尽管如此,在查看了大量线程后,我仍无法确定问题所在。
#!/usr/bin/env python
# Reflects the requests with dummy responses from HTTP methods GET, POST, PUT, and DELETE
# Written by Tushar Dwivedi (2017)
import json
# from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import sys
sys.path.append(r'C:\Users\[...]')
from http.server import BaseHTTPRequestHandler,HTTPServer
from optparse import OptionParser
class RequestHandler(BaseHTTPRequestHandler):
def __init__(self, *args, **kwargs):
BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
self.dummy_var = None
def do_GET(self):
request_path = self.path
print("\n----- Request Start ----->\n")
print("request_path :", request_path)
print("self.headers :", self.headers)
print("<----- Request End -----\n")
self.send_response(200)
self.send_header("Set-Cookie", "foo=bar")
self.end_headers()
self.wfile.write(json.dumps({'value_1': str(self.calc_value()), 'value_2': '0'}).encode())
def calc_value(self):
if self.dummy_var is None:
self.dummy_var = 0
self.dummy_var = self.dummy_var + 1
return self.dummy_var
do_PUT = do_POST
do_DELETE = do_GET
def main():
port = 8000
print('Listening on localhost:%s' % port)
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
if __name__ == "__main__":
parser = OptionParser()
parser.usage = ("Creates an http-server that will echo out any GET or POST parameters, and respond with dummy data\n"
"Run:\n\n")
(options, args) = parser.parse_args()
main()
我正在启动服务器并从第二个脚本发出请求,
r = requests.get('http://localhost:8000').json()
基本思路(用于测试)是每次发出请求时,dummy_var 充当计数器。
但是,我收到以下错误:
File "C:\Users\[...]\http_server.py", line 60, in calc_value
if self.__dummy_var is None:
AttributeError: 'RequestHandler' object has no attribute 'dummy_var'
有什么建议吗?
我确实检查了缩进,但它似乎全是空格,没有制表符。
由于很难从评论中看到必要的更改,我认为值得在这里分享。
解决方法是在调用__init__()
之前设置属性,并使用super()
进行协同继承。因此,init 方法应更改为以下行:
def __init__(self, *args, **kwargs):
self.dummy_var = None
super().__init__(*args, **kwargs)
我知道此类问题已经被经常提出。尽管如此,在查看了大量线程后,我仍无法确定问题所在。
#!/usr/bin/env python
# Reflects the requests with dummy responses from HTTP methods GET, POST, PUT, and DELETE
# Written by Tushar Dwivedi (2017)
import json
# from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import sys
sys.path.append(r'C:\Users\[...]')
from http.server import BaseHTTPRequestHandler,HTTPServer
from optparse import OptionParser
class RequestHandler(BaseHTTPRequestHandler):
def __init__(self, *args, **kwargs):
BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
self.dummy_var = None
def do_GET(self):
request_path = self.path
print("\n----- Request Start ----->\n")
print("request_path :", request_path)
print("self.headers :", self.headers)
print("<----- Request End -----\n")
self.send_response(200)
self.send_header("Set-Cookie", "foo=bar")
self.end_headers()
self.wfile.write(json.dumps({'value_1': str(self.calc_value()), 'value_2': '0'}).encode())
def calc_value(self):
if self.dummy_var is None:
self.dummy_var = 0
self.dummy_var = self.dummy_var + 1
return self.dummy_var
do_PUT = do_POST
do_DELETE = do_GET
def main():
port = 8000
print('Listening on localhost:%s' % port)
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
if __name__ == "__main__":
parser = OptionParser()
parser.usage = ("Creates an http-server that will echo out any GET or POST parameters, and respond with dummy data\n"
"Run:\n\n")
(options, args) = parser.parse_args()
main()
我正在启动服务器并从第二个脚本发出请求,
r = requests.get('http://localhost:8000').json()
基本思路(用于测试)是每次发出请求时,dummy_var 充当计数器。
但是,我收到以下错误:
File "C:\Users\[...]\http_server.py", line 60, in calc_value
if self.__dummy_var is None:
AttributeError: 'RequestHandler' object has no attribute 'dummy_var'
有什么建议吗?
我确实检查了缩进,但它似乎全是空格,没有制表符。
由于很难从评论中看到必要的更改,我认为值得在这里分享。
解决方法是在调用__init__()
之前设置属性,并使用super()
进行协同继承。因此,init 方法应更改为以下行:
def __init__(self, *args, **kwargs):
self.dummy_var = None
super().__init__(*args, **kwargs)