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. 实例方法.静态方 ...
随机推荐
- Div+CSS总结
之前最早接触是在牛腩新闻发布系统中,当时看到这些自己是一头雾水,不过好在我们已经形成了这样的学习习惯,先实践在接触理论,这样再学习理论的时候就会想到当初我是怎样的迷茫,这样自己印象更深刻. DIV+C ...
- postgresql —— 表的继承
示例: CREATE TABLE cities ( --父表 name text, population float, altitude int ); CREATE TABLE capitals ( ...
- machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式
Normal equation: 一种用来linear regression问题的求解Θ的方法,另一种可以是gradient descent 仅适用于linear regression问题的求解,对其 ...
- Spring Task定时任务的配置和使用详解
spring中使用定时任务 1.基于xml配置文件使用定时任务 首先配置spring开启定时任务 <beans xmlns="http://www.springframework.or ...
- 从GITHUB下载源码
从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄.然而,今天终于成功了,激动地我赶紧来记录一下. 如何从G ...
- Spring框架 IOC注解
Spring框架的IOC之注解方式的快速入门 1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring ...
- 域渗透:LSA Protection
简介:微软在 2014 年 3 月 12 日添加了 LSA 保护策略,用来防止对进程 lsass.exe 的代码注入,这样一来就无法使用 mimikatz 对 lsass.exe 进行注入,相关操作也 ...
- es 启动问题
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] vim / ...
- 转载 C# 开源框架(整理)
C# 开源框架(整理)http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html Json.NET http://json.codeplex.c ...
- golang go程和出让时间片
golang go程和出让时间片 func main() { go func(){ //创建一个子go程 ;i<;i++{ fmt.Println("--------fuck U--- ...