Search code examples
python-3.xoopgetter-setterpython-class

Python: for multiple properties use one getter and setter method


I have created a class that has multiple properties. I want to use one function for the getter method and the second one for the setter method.

class person:

    def __init__(self, fname, lname, city, state):
        # make all attributes as private
        self._fname = fname
        self._lname = lname
        self._city = city
        self._state = state

    @property  # get method
    def fname(self):
        return self._fname

    @fname.setter  # set method
    def fname(self,fname):
        self._fname = fname

    @property
    def lname(self):
        return self._lname

    @lname.setter
    def lname(self,lname):
        self._lname = lname

    @property
    def city(self):
        return self._city

    @city.setter
    def city(self, city):
        self._city = city

    @property
    def state(self):
        return self._state

    @state.setter
    def state(self, state):
        self._state = state  

How to use all properties for one get methods and one set method?

e.g.:

def get(self):
    return self._attr

def set(self,value):
    self._attr = value

Solution

  • class person:
        def __set_name__(self, name):
            self.name = name
    
        def __get__(self, obj, type=None) -> object:
            return obj.__dict__.get(self.name)
    
        def __set__(self, obj, value) -> None:
            obj.__dict__[self.name] = value
    
    my_value = person
    my_values.fname = 'Shivam'
    my_values.lname = 'Gupta'
    
    print(my_values.fname)  #--> Shivam
    print(my_values.lname)  #--> Gupta