如果我将此变量初始化为字符串,为什么Python将此变量解释为int?

时间:2013-03-15 07:04:17

标签: python class typeerror self

在学校项目上工作。我遇到了这个错误

>>> y = tokens.numberToken('1.23')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tokens.py", line 10, in __init__
    self._value = v
ValueError: invalid literal for int() with base 10: '1.23'

我追溯到这段代码

class token:
    def type(self):
        return "UNDEF"
    def getValue(self):
        pass

class numberToken(token):
    _value = "0.0"
    def __init__(self, v = "0.0"):
        self._value = v
    def type(self):
        return "num"
    def getValue(self):
        try:
            r = int(_value)
        except ValueError:
            r = float(_value)
        return r

我意识到在getValue(self)中,_value应该是self._value。我修复了这个想法,它可能是无关的,但是在重新加载模块时,代码运行得很好。

所以我的问题是为什么python尝试将输入的字符串转换为int,为什么在另一个函数中将_value更改为self._value会修复代码?

1 个答案:

答案 0 :(得分:0)

你的getValue确实是错误的。要在类中使用_value,您需要键入self._value,这样您就可以使用_value作为类的实例。这就是为什么当你改变它时它会起作用。

这样它就会查找定义为全局的_value。或者你可以在调用时将它作为参数传递给方法,并像使用它一样使用它。

def getValue(self, _value):
    try:
        r = int(_value)
    except ValueError:
        r = float(_value)
    return r

如需参考,请查看http://docs.python.org/2/tutorial/classes.html

这是文档中的示例,您可以在其中查看如何在课程中使用数据和索引。

class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]