我遇到一个问题,即在使用print时正确设置了类变量并在__init__()
内正确显示,但是,试图在__str__
方法中显示相同的变量会显示None。生成的其他三个变量完全相同,不会出现这种行为。
这是我的代码:
class RestRequest(urllib2.Request):
def __init__(self, host, path, data=""):
self.host = host
self.data = data
self.path = path
print "RestRequest::init() path: %s" % self.path
print "RestRequest::init() data: %s" % self.data
print "RestRequest::init() host: %s" % self.host
urllib2.Request.__init__(self, self.path)
def __str__(self):
return "RestRequest::__str__() host='%s', path='%s', data='%s'" % (self.host, self.path, self.data)
__init__()
内的打印语句显示正确的值。 __str__
内的主机值为None。路径,方法和数据变量在__str__
内正确显示。
有什么想法吗?
答案 0 :(得分:1)
您正在与attributes on the super class发生命名冲突。您需要更改属性的名称 - 或者在urllib2.Request.__init__
之后设置它们(假设您的值与超类所需的值兼容)。
答案 1 :(得分:1)
urllib2.Request
在self.host = None
中设置__init__
。为了防止意外情况发生,请在子类__init__
中先前调用超类__init__
:
class RestRequest(urllib2.Request):
def __init__(self, host, path, data=""):
urllib2.Request.__init__(self, path) # sets self.host = None
self.host = host # resets to correct value
self.path = path
self.data = data