为什么我的Python对象在IPython笔记本中初始化不正确?

时间:2018-08-11 14:43:53

标签: python ipython python-3.6

我有以下类,这些类在IPython 3.6笔记本中使用:

class LaborResult:
    value = Value()
    quantity = 0.0 

class Value:
    absolute = 0
    relative = 0
    service = 0
    def add(self, anotherValue):
        self.absolute = self.absolute + anotherValue.absolute
        self.relative = self.relative + anotherValue.relative
        self.service = self.service + anotherValue.service
    def str(self):
        return 'Value(abs=' + str(self.absolute) + ', rel=' + str(self.relative) + ', srv=' + str(self.service) + ')'

我发现在某些情况下value.relative初始化为错误的值(12而不是0)。

执行时

x = Value()
x.str()

我得到正确的结果:

'Value(abs=0, rel=0, srv=0)'

当我将代码更改为

y = LaborResult()
y.value.str()

结果是

'Value(abs=0, rel=12, srv=0)'

我看不到rel=12的来源。

不幸的是,如果我删除所有其他代码(即,仅隔离这两个类),则不会发生此错误。此类行为的可能原因是什么,以及如何解决(确保第二个示例中的y.value.relative == 0)?

更新

将错误改写为:

class Value:
    def __init__(self):
        self.absolute = 0.0
        self.relative = 0.0
        self.service = 0.0
    def add(self, anotherValue):
        self.absolute = self.absolute + anotherValue.absolute
        self.relative = self.relative + anotherValue.relative
        self.service = self.service + anotherValue.service
    def str(self):
        return 'Value(abs=' + str(self.absolute) + ', rel=' + str(self.relative) + ', srv=' + str(self.service) + ')'

class LaborResult:
    def __init__(self):
        self.value = Value()
        self.quantity = 0.0

0 个答案:

没有答案