翼度科技»论坛 编程开发 python 查看内容

Property属性使用

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
★ 基本定义
  1. 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法
复制代码
★ property属性的两种方式


  • 装饰器    =>  在方法上应用装饰器
  • 类属性    =>  在类中定义值为property对象的类属性
★ 装饰器方式


  • 代码示例
    1. class Goods(object):
    2.     def __init__(self):
    3.         # 原价
    4.         self.original_price = 100
    5.         # 折扣
    6.         self.discount = 0.8
    7.     @property
    8.     def price(self):
    9.         # 实际价格 = 原价 * 折扣
    10.         new_price = self.original_price * self.discount
    11.         return new_price
    12.     # 新式类独有
    13.     @price.setter
    14.     def price(self, value):
    15.         self.original_price = value
    16.     # 新式类独有
    17.     @price.deleter
    18.     def price(self):
    19.         del self.original_price
    20. obj = Goods()
    21. obj.price         # 获取商品价格
    22. obj.price = 200   # 修改商品原价
    23. del obj.price     # 删除商品原价
    复制代码
  • 示例说明
    1. 1.定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
    2. 2.经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法
    3. 3.新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法;我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
    复制代码
  • 应用实例
    1. class Pager:
    2.     def __init__(self, current_page):
    3.         # 用户当前请求的页码(第一页、第二页...)
    4.         self.current_page = current_page
    5.         # 每页默认显示10条数据
    6.         self.per_items = 10
    7.     @property
    8.     def start(self):
    9.         val = (self.current_page - 1) * self.per_items
    10.         return val
    11.     @property
    12.     def end(self):
    13.         val = self.current_page * self.per_items
    14.         return val
    15. p = Pager(1)
    16. p.start  # 就是起始值,即:m
    17. p.end  # 就是结束值,即:n
    18. # Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回。
    复制代码
★ 类属性方式


  • 代码示例
    1. class Goods(object):
    2.     def __init__(self):
    3.         # 原价
    4.         self.original_price = 100
    5.         # 折扣
    6.         self.discount = 0.8
    7.     def get_price(self):
    8.         # 实际价格 = 原价 * 折扣
    9.         new_price = self.original_price * self.discount
    10.         return new_price
    11.     def set_price(self, value):
    12.         self.original_price = value
    13.     def del_price(self):
    14.         del self.original_price
    15.     PRICE = property(get_price, set_price, del_price, '价格属性描述...')
    16. obj = Goods()
    17. obj.PRICE         # 获取商品价格
    18. obj.PRICE = 200   # 修改商品原价
    19. del obj.PRICE     # 删除商品原价
    复制代码
  • 示例说明
    1. 1.当使用类属性的方式创建property属性时,经典类 和 新式类 无区别
    2. 2.property方法中有个四个参数
    3.         第一个参数是方法名,调用 对象.属性 时自动触发执行方法
    4.         第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
    5.         第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
    6.         第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息
    7. 3.由于 类属性方式 创建property属性具有3种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
    复制代码

来源:https://www.cnblogs.com/cs-songbai/p/18115802
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具