python - 为什么我的 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
解决方案
推荐阅读
- python - Python在根据不同条件分配和绘制颜色时避免使用多个if语句
- android - 如何从 firebase 和 setText 检索数据到 TextView?
- sqlite - 如何将数据从树莓派发送到我的笔记本电脑?
- java - Oracle JDK11 (LTS) - 作为开发人员/测试人员,我可以免费从 Oracle 获得 LTS 更新吗?
- ramda.js - Ramda,使用或条件过滤
- loops - 我的 for 循环和条件返回混淆
- android - Android Monospace 不表现为固定间距
- android - 带有底部导航的导航组件
- javascript - 如何避免 JavaScript 中的多个 IF 语句?
- sql - SQL触发器-检查其他表,如果存在则更新否则插入