Python高级笔记(六)-- property属性【重要】

1. property属性

class Goods(object):
    @property
    def size(self):
        return 100

obj = Goods()
ret = obj.size   # 调用属性
print(ret)

//test2

class Pager(object):
    def __init__(self, current_page):
        # 用户当前请求的页码(第一页,第二页....)
        self.current_page = current_page
        # 每页默认显示10条数据
        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)
print(p.start)    # 就是起始值,即 m
print(p.end)      # 就是结束值,即 n

2. property属性的两种方式

  • 装饰器 即:在方法上应用装饰器

  • 类属性 即:在类中定义值为property对象的类属性

2.1 装饰器方法

在类的实例方法上应用@property装饰器

经典类,具有一种@property装饰器

class Goods(object):
    @property
    def gname(self):
        return "douzi"

obj = Goods()
ret = obj.gname   # 自动执行 @property 修饰的price方法,并获取方法的返回值
print(ret)

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

@property

@xxx.setter

@xxx.deleter

class Goods(object):
    """
    python3 里面才有 @xxx.setter, @xxx.deleter
    python2 里面只有 @property
    """
    @property
    def gname(self):
        return "@property"

    @gname.setter
    def gname(self, value):
        print("@gname.setter", value)

    @gname.deleter
    def gname(self):
        print("@gname.deleter")


obj = Goods()
ret = obj.gname      # 自动执行 @property 修饰的price方法,并获取方法的返回值
print(ret)
obj.gname = "cute"   # 自动执行 @gname.setter 修饰的price方法,并将 123 赋值给方法参数

del obj.gname        # 删除obj名字
@property
@gname.setter cute
@gname.deleter

猜你喜欢

转载自www.cnblogs.com/douzujun/p/10823178.html