当前位置: 首页 > 面试题库 >

如何通过更改另一个属性的值来更改一个属性的值?(相关属性)

漆雕欣德
2023-03-14
问题内容

因此,我最近开始涉足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


 类似资料:
  • 谁能帮帮我吗。我有一个物品清单——在我的例子中有啤酒厂。每个酿酒厂都有一些属性(字段),如姓名、地址、id、省份(所在州)等。。。一家酿酒厂(名称)可以位于多个省份。现在我需要解决的问题是:如何计算每个州的啤酒厂数量?所以,按省份分组。所有数据都是从csv文件读取的。我已经创建了返回啤酒厂列表的阅读器。当我尝试这个: 这将返回我键(省)和整个对象作为值。 我已经坐了几个小时了。我没有主意了。

  • 问题内容: 是否可以通过读取另一个bean的属性来设置一个bean的属性?例如,假设我有: 我希望Spring实例化这两个类,并调用A的setList方法,并传入调用B的getList方法的结果。Spring配置可能类似于: las,这种伪造的XML不起作用。 为什么不将B注入A?因为我不想引入额外的依赖关系。A仅依赖列表,而不依赖B。 问题答案: 如果你使用的是spring 3.0,还可以使用新

  • 问题内容: 我在HTML中创建了一个属性,该属性动态地填充了信息。 有没有一种方法可以检测属性值何时更改? 问题答案: 您将必须注意DOM节点的更改。有一个名为的API,但似乎对其的支持非常有限。这样的答案有一个指向API状态的链接,但是到目前为止,似乎在IE或Opera中都不支持它。 解决该问题的一种方法是让修改属性的代码部分分派一个您可以侦听的事件。 这里的代码是

  • 我是XSLT新手,希望能得到一些帮助。 我目前有一个XML,它包含以下格式的多个副本: 我的任务是替换id属性的值。我需要根据代码的数字部分改变这个值。如果值大于850000,格式应该改为USA868509。如果该值小于850000,则将id值更改为仅包括数字。XML中的其余值应保持完全相同。 我目前拥有以下xslt: 我很难确定要更改的值,因为XSLT不执行变量循环。有没有办法更改XSLT以获得

  • 这是我的代码: 我想将的值设置为,我该怎么做?我试过,

  • 我做了一个我能证明问题的最小项目: 背后的代码: Xaml: 编辑:Xaml现在包括我想在用户控件中排列的元素。 主窗口 Xaml: 这个想法是根据其布局属性设置 UserControl 的布局,因此我将两种布局都放在静态资源中,并制作了一个样式以根据类型为“方向”的布局将内容设置为我想要的内容。 编辑:我希望内容包含根据方向以不同顺序排列的元素。 用户控件显示正确,但输出窗口中有一个与我有关的错