In short, the process is to set the properties needed to change it, change can be done only once decorated the get and set requests (del can also be added using the same principle)
Code written is not optimal but can refer to this idea:
import copy class PropertyTest(object): def __init__(self, fget=None): self.fget = fget self.fset = copy.deepcopy(fget) def __get__(self, instance, owner): return self.fget(instance) def __set__(self, instance, value): self.fset(instance, value) class Person(object): def __init__(self, name=None, age=None, region=None): self.name = name self.age = age self.region = region pass @PropertyTest def name(self, name_value=None): if name_value is None: return self.name else: self.name = name_value @PropertyTest def age(self, age_value=None): if age_value is None: return self.age else: self.age = age_value @PropertyTest def region(self, region_value=None): if region_value is None: return self.region else: self.region = region_value if __name__ == '__main__': person = Person person.name = "张小凡" person.age = 20 person.region = "中国" print("{}是{}人,年龄{}岁".format(person.name, person.region, person.age))
operation result:
It can be found in our code that uses only @PropertyTest a decorator.
Problems encountered:
return self.fget (instance) This line of code should explain how? self.fget is passed Person object, instance is an instance of an object. Two together, how to access the internal variables becomes of it?