1、property定义
一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法,通过使用property属性,能够简化调用者在获取数据的流程。
property属性的定义和调用要注意以下几点:
定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
调用时,无需括号,加上就错了。
class Foo(object):
def __init__(self):
self.name = "laowang"
@property
def man(self):
new_name = self.name
return new_name
f = Foo()
a = f.man
print(a) # f运行结构是 laowang
2、实现property属性的两种方式
2.1装饰器
经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法,即只能读取。(Python2中)
新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法,分别对应读取、修改和删除属性的方法。(Python3中)
2.2类属性
当使用类属性的方式创建property属性时,经典类和新式类无区别
property()方法有四个参数
第一个参数是方法名,调用 对象.属性 时自动触发执行方法
第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
第四个参数是字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
class Foo:
def get_bar(self):
return "laowang"
BAR = property(get_bar)
f = Foo()
print(f.get_bar()) # 运行结果是 laowang
print(f.BAR) ## 运行结果是 laowang