property属性

本文介绍了Python的property属性,它允许将方法表现为实例属性,用于数据封装。内容包括property的定义、调用注意事项、简单实例、两种实现方式(装饰器和类属性)、在Django框架中的应用以及在getter、setter方法中的应用。通过property,可以更方便地管理对象的属性并进行逻辑处理。
摘要由CSDN通过智能技术生成

property属性

一、什么是property

property是一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法。

# -*- coding: utf-8 -*-


# ############### 定义 ###############
class Foo:
    def func(self):
        pass

    # 定义property属性
    @property
    def prop(self):
        return 100


# ############### 调用 ###############
foo_obj = Foo()
foo_obj.func()  # 调用实例方法
foo_obj.prop  # 调用property属性

property属性的定义和调用要注意一下几点:

  • 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数

  • 调用时,无需括号

      方法:foo_obj.func()
      property属性:foo_obj.prop
    

注意点:

# -*- coding: utf-8 -*-


class Foo:
    def zero(self):
        pass

    @property
    def one(self):
        return 100

    @property
    def two(self, arg):
        return 100


if __name__ == '__main__':
    fo = Foo()
    fo.zero()  # 正常
    fo.one()   # 报错:TypeError: 'int' object is not callable
    fo.one	   # 正常
    fo.two     # 报错:TypeError: two() missing 1 required positional argument: 'arg'
    fo.two(1)  # 报错:TypeError: two() missing 1 required positional argument: 'arg'
    

总结

一个函数正常情况下需要使用()来调用,而一个函数如果添加了@prpoerty装饰器,可以不使用()而直接调用。并且这个函数必须为1个参数及self,如果添加一个参数就会使这个函数破坏,不管咋样都不能调用会一直报错。

二、简单实例

对于csdn的列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据 这个分页的功能包括:

  • 根据用户请求的当前页和总数据条数计算出 m 和 n
  • 根据m 和 n 去数据库中请求数据
# -*- coding: utf-8 -*-
class Pager:
    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)
p.start  # 就是起始值,即:m
p.end  # 就是结束值,即:n

从上述可见

  • Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回。

三、property属性的有两种方式

  • 装饰器 即:在方法上应用装饰器
  • 类属性 即:在类中定义值为property对象的类属性

3.1 装饰器方式

python3中,在类的实例方法上应用@property装饰器。

#coding=utf-8
# ############### 定义 ###############
class Goods:
    """python3中默认继承object类
        以python2、3执行此程序的结果不同,因为只有在python3中才有@xxx.setter  @xxx.deleter
    """
    @property
    def price
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值