首页 > 解决方案 > 为什么我的 Python 对象在 IPython 笔记本中被错误地初始化?

问题描述

我有以下课程,我在 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

标签: pythonipythonpython-3.6

解决方案


推荐阅读