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属性【重要】的更多相关文章

  1. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  2. python高级(六)——用一等函数实现设计模式

    本文主要内容 经典的“策略”模式 python高级——目录 文中代码均放在github上:https://github.com/ampeeg/cnblogs/tree/master/python高级 ...

  3. Python高级笔记(七)魔法属性

    1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...

  4. python学习笔记六 面向对象相关下(基础篇)

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...

  5. python 学习笔记之@property

    今天学习python类看到 @property 的用法觉得很新奇,就自己尝试了很久,刚开始不明白,后来终于明白了点 其实总结一句话就是, @property 把类中的方法调用方式改变成当成属性属性调用 ...

  6. Python高级笔记(九)Python使用MySQL

    1. MySQL基本使用 1.1 数据库简介 Mysql: 关系型数据库,做网站 redis:当作缓存 mongodb:非关系型数据库,做爬虫 SQL语句: DQL:数据查询语言,用于对数据进行查询, ...

  7. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  8. Python学习笔记六--文件和输入输出

    6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...

  9. Python高级笔记(五)--实例方法、静态方法和类方法

    1. 类属性.实例属性 类属性在内存中只保存一份 实例属性在每个对象中都要保持一份 obj.__class__.country="xxx": 可以修改类属性 2. 实例方法.静态方 ...

随机推荐

  1. sublime+python3 中文环境

    工具-编译系统-新编译系统 { "cmd": ["C:/Program Files (x86)/Python36-32/python.exe","-u ...

  2. cocoapods安装错误的原因

    gem 可以理解为管理RUBY库和程序包的查找,安装,升级和卸载是个非常好用的工具. gem install cocoapods过程中出现错误的问题.1.gem的源设置错误应该参照,下面来执行gem ...

  3. Acwing P277 饼干 题解

    每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考 ...

  4. ORA-609 错误分析及解决方法 (转载)

    某个客户数据库在巡检的时候发现alert日志里不定期会出现ORA-609错误,大致内容如下: ***************************************************** ...

  5. 结构化异常SEH处理机制详细介绍(一)

    结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能.而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对Window ...

  6. GitHub上的一些使用技巧

    1.搜索 转:掌握 3 个搜索技巧,在 GitHub 上快速找到实用软件资源 例如 查找位于深圳的C#开发者 2.查看文件历史提交记录 定位至需要查看的文件 修改地址栏github.com 为 git ...

  7. element-ui upload上传组件问题记录

    element-ui upload上传组件遇到的问题

  8. php 简单使用redis 队列示例

    public function redisAction(){ $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo &qu ...

  9. 【数论】P1029 最大公约数和最小公倍数问题

    题目链接 P1029 最大公约数和最小公倍数问题 思路 如果有两个数a和b,他们的gcd(a,b)和lcm(a,b)的乘积就等于ab. 也就是: ab=gcd(a,b)*lcm(a,b) 那么,接下来 ...

  10. 22、BlockManager原理剖析与源码分析

    一.原理 1.图解 Driver上,有BlockManagerMaster,它的功能,就是负责对各个节点上的BlockManager内部管理的数据的元数据进行维护, 比如Block的增删改等操作,都会 ...