标签: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