Python高级笔记(六)-- property属性【重要】
2024-08-26 13:47:32
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
2.2 类属性方法,创建值为property对象的类属性
当使用类属性的方式创建property属性时,经典类和新式类无区别
#!/usr/bin/python3
#-*- coding:utf-8 -*- class Foo(object):
def get_bar(self):
return "douzi" BAR = property(get_bar) obj = Foo()
res = obj.BAR # 自动调用get_bar方法, 并获取方法的返回值
print(res)
property方法中有四个参数
第一个参数是方法名,调用 对象.属性 时自动触发执行方法
第二个参数是方法名,调用 对象.属性 = xxx 时自动触发执行方法
第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
第四个参数是字符串,调用 对象.属性.__doc__,此参数是该属性的描述信息
#!/usr/bin/python3
#-*- coding:utf-8 -*- class Foo(object):
def get_bar(self):
print("getter....")
return "douzi" def set_bar(self, value):
"""必须两个参数"""
print("setter....", value) def del_bar(self):
print("deleter...")
return "del value" BAR = property(get_bar, set_bar, del_bar, "description....") obj = Foo()
res = obj.BAR # 自动调用get_bar方法, 并获取方法的返回值
print("getter....", res) obj.BAR = "dou zi" del obj.BAR print(Foo.BAR.__doc__)
3. 私有属性添加setter和getter方法
调用的方法可以通过各种逻辑处理
#!/usr/bin/python3
#-*- coding:utf-8 -*- class Money(object):
def __init__(self):
self.__money = 0 def getMoney(self):
return self.__money def setMoney(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error: 不是整型数字") # 定义一个属性,当对这个money设置值时调用setMoney,获取值时调用getMoney
money = property(getMoney, setMoney) a = Money()
a.money = 100 # 调用setMoney
print(a.money) # 调用getMoney
新式类
#!/usr/bin/python3
#-*- coding:utf-8 -*- class Money(object):
def __init__(self):
self.__money = 0 @property
def Money(self):
return self.__money @Money.setter
def Money(self, money):
if isinstance(money, int):
self.__money = money
else:
print("error: 不是整型数字") a = Money()
a.money = 100 # 调用setMoney
print(a.money) # 调用getMoney
最新文章
- js-JavaScript高级程序设计学习笔记21 改善JavaScript性能的方法
- MySQL事务学习-->;隔离级别
- mysql密码遗忘和登陆报错问题
- [codeforces 55]D. Beautiful numbers
- python中的Queue
- How to Write and Publish a Scientific Paper: 7th Edition(科技论文写作与发表教程)(11.04更新)
- lucene_indexWriter说明、索引库优化
- 用crontab、crond在嵌入式系统中添加定时任务
- 网络流(最大流) POJ 1637 Sightseeing tour
- JQuery实现 checkbox 全选、反选,子checkbox有没选去掉全选
- phpmailer发送邮件,可以带附件
- Laravel分页
- LNMP1.3 一键配置环境,简单方便
- 如何使用MOQ进行单元测试
- 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码
- 【Java入门提高篇】Day14 Java中的泛型初探
- Android中典型的ROOT原理(5)
- Python 下载win32api 模块
- 24 Game
- 第5章 Java中的锁
热门文章
- vbs查找Excel中的Sheet2工作表是否存在不存在新建
- python多线程扫描爆破网站服务器思路【笔记】
- Oracle密码过期 ORA-28002:口令将过期 解决方法
- celery retry发送的队列
- lstm-bp过程的手工源码实现
- 配置Sublime,为了Python
- SIGAI机器学习第十八集 线性模型2
- https://www.cnblogs.com/myblogs-miller/p/9046425.html
- am335x system upgrade rootfs for dhcpcd cross compile(十三)
- P1894 [USACO4.2]完美的牛栏The Perfect Stall