__str__方法显示类局部变量的无值

时间:2014-08-28 15:46:44

标签: python python-2.7

我遇到一个问题,即在使用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__内正确显示。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您正在与attributes on the super class发生命名冲突。您需要更改属性的名称 - 或者在urllib2.Request.__init__之后设置它们(假设您的值与超类所需的值兼容)。

答案 1 :(得分:1)

urllib2.Requestself.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