"""
定义时:在实例方法的基础上添加@property装饰器 并且仅有一个self参数
调用时:无需括号
python的property属性的功能:property属性内部进行一系列逻辑计算最终将计算结果返回
"""
class Pager:
def __init__(self,current_page):
self.current_page = current_page
self.per_items = 10
@property
def start(self):
val = (self.current_page - 1) * self.per_items
return val
@property
def end(self):
val = self.current_page * self.per_items
return val
p = Pager(1)
p.start
p.end
"""
property属性的两种方式
1. 装饰器:在实例方法上应用装饰器
2. 类属性:在类中定义值为property对象的类属性
"""
class Goods(object):
"""
新式类:python3中才有setter和deleter的功能
"""
def __init__(self) -> None:
self.oriinal_price = 100
self.discount = 0.8
@property
def price(self):
new_price = self.oriinal_price * self.discount
return new_price
@price.setter
def price(self,value):
self.oriinal_price = value
@price.deleter
def price(self):
del self.original_price
obj = Goods()
obj.price
obj.price = 120
del obj.price
class Foo(object):
def get_bar(self):
return "get_bar"
def set_bar(self,value):
return "set value" + value
def del_bar(self):
return "del bar"
bar = property(get_bar,set_bar,del_bar,"__doc__")
obj = Foo()
obj.bar
obj.bar = "重置bar的值"
del obj.bar
desc = Foo.bar.__doc__