如何通过更改另一个属性的值来更改一个属性的值?(相关属性)
因此,我最近开始涉足OOP,到目前为止一切进展顺利。虽然我本身没有任何问题,但我希望有一个令人惊奇的功能,尽管我找不到关于该功能的任何文档。
在为对象分配属性时,我经常发现我必须更改依赖于他人的属性,例如光明与黑暗。这是一个例子:
class shade:
def __init__(self, light):
self.light=light
self.darkness=100-light
def __str__(self):
return (str(self.light) + ',' + str(self.darkness))
>>> shade1=shade(30,70)
>>> shade1.light
30
>>> shade1.darkness
70
现在,尽管这很酷,但我想要的是相同的过程,但是如果一个属性发生更改,则在同一对象内。如果我重置光的属性(是的),我希望黑暗相应地增加/减少。如果可以更改光的属性,并返回新的光/暗值,那么我可以使用一个函数来执行此操作,但是如果我只是通过重新分配其值来更改光的属性,则我想采用一种方法,没有使用功能,例如:
>>> shade1.light=50
>>> shade1.light
50
>>> shade1.darkness
50
另外,作为OOP的新手,如果有人知道一些好的教程,那也将是巨大的帮助。
提前致谢。
-
定义
darkness
为属性class shade: def __init__(self, light): self.light=light @property def darkness(self): return 100 - self.light def __str__(self): return (str(self.light) + ',' + str(self.darkness))
属性在外部显示为属性,但在内部充当函数调用。当您说时
s.darkness
,它将调用您为其属性提供的函数。这使您只能在内部维护一个变量。如果您希望能够通过分配给黑暗来对其进行修改
setter
,请为该属性添加一个class shade: def __init__(self, light): self.light=light @property def darkness(self): return 100 - self.light @darkness.setter def darkness(self, value): self.light = 100 - value
从而 实际 修改光。如果您以前从未看过属性,我建议
print()
您在函数的主体中添加一些,以便您查看何时调用它们。>>> s = shade(70) >>> s.light 70 >>> s.darkness 30 >>> s.light = 10 >>> s.darkness 90 >>> s.darkness = 20 >>> s.light 80