Search code examples
pythonpropertiesgetter-setter

Property object assignment


I have been reading some examples of using getter and setter via Python property object and saw two different implementations but I could not tell what's the difference.

assigning to private variable in __init__:

class Alphabet:
    def __init__(self, value):
        self._value = value
 
    # getting the values
    def getValue(self):
        print('Getting value')
        return self._value
 
    # setting the values
    def setValue(self, value):
        print('Setting value to ' + value)
        self._value = value
 
    # deleting the values
    def delValue(self):
        print('Deleting value')
        del self._value
 
    value = property(getValue, setValue,
                     delValue, )

assigning to property object in __init__:

class Celsius:
    def __init__(self, temperature=0):
        self.temperature = temperature

    def to_fahrenheit(self):
        return (self.temperature * 1.8) + 32

    # getter
    def get_temperature(self):
        print("Getting value...")
        return self._temperature

    # setter
    def set_temperature(self, value):
        print("Setting value...")
        if value < -273.15:
            raise ValueError("Temperature below -273.15 is not possible")
        self._temperature = value

    # creating a property object
    temperature = property(get_temperature, set_temperature)

Solution

  • In Alphabet.__init__, you don't have the effect of the setter but in Celsius.__init__ you have.

    In other words in Celsius.__init__, you're setting the value of your private variable(you called it, they are not private by that meaning in other languages) through the setter, but in Alphabet.__init__ you're setting it directly.

    So if you have any validation in your setter, it's not gonna work while you instantiating your class in Alphabet, but it will in Celsius.