How do you change the value of one attribute by changing the value of another? (dependent attributes)

后端 未结 1 812
南旧
南旧 2020-12-04 00:03

So I\'ve recently dived into OOP, and so far everything is going smooth. Whilst I have no issues per se, there\'s an amazing feature which I hope exists, though I cannot fin

相关标签:
1条回答
  • 2020-12-04 00:46

    Define darkness as a property

    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))
    

    Properties outwardly appear as attributes, but internally act as function calls. When you say s.darkness it will call the function you've provided for its property. This allows you to only maintain one variable internally.

    If you want to be able to modify it by assigning to darkness, add a setter for the property

    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
    

    Thereby actually modifying light. If you've never seen properties before, I'd recommend throwing in some print()s to the bodies of the functions so you can see when they are called.

    >>> s = shade(70)
    >>> s.light
    70
    >>> s.darkness
    30
    >>> s.light = 10
    >>> s.darkness
    90
    >>> s.darkness = 20
    >>> s.light
    80
    
    0 讨论(0)
提交回复
热议问题