Python #@property属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python #@property属性相关的知识,希望对你有一定的参考价值。

 

#-*- coding:utf-8 -*-
# class Foo:
#     def func(self):
#         print ‘func‘
#
#     # 定义属性
#     @property
#     def prop(self):
#         print ‘prop‘
#
# foo_obj = Foo()
# foo_obj.func()
# foo_obj.prop

# 属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象

# 属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能

#实例
# ############### 定义 ###############
class Pager:
    def __init__(self, current_page):
        # 用户当前请求的页码(第一页、第二页...)
        self.current_page = current_page
        # 每页默认显示10条数据
        self.per_items = 10

    @property
    def start(self):
        if self.current_page == 1:
            val = 1
        else:
            val = self.current_page * 10 - 9
        return val

    @property
    def end(self):
        val = self.current_page * self.per_items
        return val

# ############### 调用 ###############
p = Pager(1)
print p.start
# 就是起始值,即:m
print p.end
# 就是结束值,即:n

 

新式类,具有三种@property装饰器

#-*- coding:utf-8 -*-
class Goods(object):
    def __init__(self):
        # 原价
        self.original_price = 100
        # 折扣
        self.discount = 0.8

    @property
    def price(self):
        # 实际价格 = 原价 * 折扣
        new_price = self.original_price * self.discount
        return new_price

    @price.setter
    def price(self, value):
        self.original_price = value

    @price.deleter
    def price(self):
        # del self.original_price
        print price.deleter
    
obj = Goods()
print obj.price       # 获取商品价格
obj.price = 200       # 修改商品原价
print obj.price
del obj.price         # 删除商品原价

经典类

class Goods:
    @property
    def price(self):
        return "xxxxxxxxxxxx"
# 调用 
obj = Goods()
result = obj.price  # 自动执行 @property 修饰的 price 方法,并获取方法的返回值

 

以上是关于Python #@property属性的主要内容,如果未能解决你的问题,请参考以下文章

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

Python中的property类和@property装饰器

python属性装饰器[重复]

python 中的@property

顶点

Python使用@property装饰器--getter和setter方法变成属性