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
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
Python高级笔记(六)-- property属性【重要】的更多相关文章
- Python学习笔记六
Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...
- python高级(六)——用一等函数实现设计模式
本文主要内容 经典的“策略”模式 python高级——目录 文中代码均放在github上:https://github.com/ampeeg/cnblogs/tree/master/python高级 ...
- Python高级笔记(七)魔法属性
1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...
- python学习笔记六 面向对象相关下(基础篇)
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...
- python 学习笔记之@property
今天学习python类看到 @property 的用法觉得很新奇,就自己尝试了很久,刚开始不明白,后来终于明白了点 其实总结一句话就是, @property 把类中的方法调用方式改变成当成属性属性调用 ...
- Python高级笔记(九)Python使用MySQL
1. MySQL基本使用 1.1 数据库简介 Mysql: 关系型数据库,做网站 redis:当作缓存 mongodb:非关系型数据库,做爬虫 SQL语句: DQL:数据查询语言,用于对数据进行查询, ...
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...
- Python学习笔记六--文件和输入输出
6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...
- Python高级笔记(五)--实例方法、静态方法和类方法
1. 类属性.实例属性 类属性在内存中只保存一份 实例属性在每个对象中都要保持一份 obj.__class__.country="xxx": 可以修改类属性 2. 实例方法.静态方 ...
随机推荐
- used to do 与be used to doing /n.
1.used to do:表示过去的习惯性动作,过去如此,现在不再这样了.常译作“过去常常”.(过去时+动词不定式) He used to play basketball when he was yo ...
- 关于Spring的常用注解和接口
接口 1. BeanPostProcessor 2. FactoryBean 3. Condition 4. ImportSelector 5. ImportBeanDefinitionRegitra ...
- LightOJ - 1369 - Answering Queries(规律)
链接: https://vjudge.net/problem/LightOJ-1369 题意: The problem you need to solve here is pretty simple. ...
- LightOJ - 1349 - Aladdin and the Optimal Invitation
链接: https://vjudge.net/problem/LightOJ-1349 题意: Finally Aladdin reached home, with the great magical ...
- 2019/7/22----tomacat配置web页面访问路径
tomcat----conf-----Catalina----localhost----cms.xml,cms.xml文件中添加: <?xml version='1.0' encoding=&q ...
- DVWA-弱会话ID
本周学习内容: 1.学习web安全深度剖析: 2.学习安全视频: 3.学习乌云漏洞: 4.总结Web应用安全权威指南: 实验内容: 进行DVWA弱会话ID实验 实验步骤: Low 1.打开DVWA,进 ...
- nowcoder73E 白兔的刁难 单位根反演+NTT
感觉很套路? #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in" ...
- Intel 80386 CPU
一.80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中.这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」.80 ...
- (17)打鸡儿教你Vue.js
vue-router <a class="list-group-item" v-link="{ path: '/home'}">Home</a ...
- (16)打鸡儿教你Vue.js
博客: Hexo搭建个性博客 https://hexo.io/zh-cn/ 快速.简洁且高效的博客框架 超快速度 Node.js 所带来的超快生成速度,让上百个页面在几秒内瞬间完成渲染. 支持 Mar ...