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. 03 c++中this指针

    概念: 成员函数:在类中定义的函数.普通函数无法被继承,成员函数可以被继承.友元函数相当于普通函数. 友元函数不是类的组成,没有this指针,必须将成员函数操作符作为参数传递对象. 在c++中成员函数 ...

  2. mysql 端口号被占用

    开始-运行-cmd, 输入 netstat -ano, 看第一列,后面的就是端口,找到3306 ,记住对应的PID!!    然后打开任务管理器 查看 -> 选择列 -> 勾上 PID(进 ...

  3. FailOver的机制

    package util import ( "fmt" "hash/crc32" "math/rand" "sort" ...

  4. IDEA的安装和使用

    IDEA的特色功能 IDEA所提倡的是智能编码,是减少程序员的工作,IDEA的特色功能有以下22点 [1]  : ● 智能的选取 在很多时候我们要选取某个方法,或某个循环或想一步一步从一个变量到整个类 ...

  5. 原创:Solr Wiki 中关于Suggester(搜索推荐)的简单解读

       Solr Wiki Suggester Suggester - a flexible "autocomplete" component.(搜索推荐) A common nee ...

  6. Python逆向(一)—— 前言及Python运行原理

    一.前言 最近在学习Python逆向相关,涉及到python字节码的阅读,编译及反汇编一些问题.经过长时间的学习有了一些眉目,为了方便大家交流,特地将学习过程整理,形成了这篇专题.专题对python逆 ...

  7. 从一个表中往另外一个表中插入数据用到的SQL

    insert into jdjc_zzjcxm (zj,jcxmmc) select sys_guid(),zbmc from JDJC_WHJXXMMC;

  8. 乌班图下fluent开启并行报错的解决方法

    参考链接: CFD-online原帖:http://www.cfd-online.com/Forums/fluent/149668-fluent-16-0-0-ubuntu-12-04-a.html ...

  9. mysql group by 报错 ,only_full_group_by 三种解决方案

    报错信息  Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'data ...

  10. SET NOCOUNT 的用法

    SET NOCOUNT 使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息.   语法 SET NOCOUNT { ON | OFF }   注释 当 SET NOCOUNT  ...