标签:img turn 中国 test import lse 解释 nbsp for
简而言之,就是把设置属性所需要的过程修改一下,改成只需要一次装饰就能完成get和set请求(del也可以用同样的原理添加)
代码写得不是最优但是可以参考这个思想:
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))
运行结果:
可以发现,我们的代码只使用了@PropertyTest这一个装饰器。
遇到的问题:
return self.fget(instance) 这行代码应该怎么解释?self.fget是传入的Person对象,instance是实例对象。两个组合在一起,怎么就变成了访问内部变量了呢?
标签:img turn 中国 test import lse 解释 nbsp for
原文地址:https://www.cnblogs.com/stanmao/p/11601090.html