@property装饰器作用:把一个方法变成属性调用

使用@property可以实现将类方法转换为只读属性,同时可以自定义setter、getter、deleter方法

@property&@.setter

class Person(object):

    @property
def birth(self):
return self._birth @birth.setter
def birth(self,value):
self._birth=value if __name__ == '__main__':
p=Person()
p.birth=1985
print(p.birth) ---------------运行结果-----------------
1985

  

把方法变成属性,只需要在方法前添加@property装饰器即可。

继续添加一个装饰器@birth.setter,给属性赋值

@.getter

上例中因为在birth方法中返回了birth值,所以即使不调用getter方法也可以获得属性值。接下来再将函数稍作修改,看下getter方法是怎么使用的。

class Person(object):

    @property
def birth(self):
return 'my birthday is a secret!' @birth.setter
def birth(self,value):
self._birth=value if __name__ == '__main__':
p=Person()
p.birth=1985
print(p.birth) ------------------运行结果------------------
my birthday is a secret!

  

因为将birth方法的返回值写了固定值,所以即使赋值成功,但是并不会打印。

如果想打印出具体的值,可以增加getter方法。

class Person(object):

    @property
def birth(self):
return self._birth @birth.setter
def birth(self,value):
self._birth=value @birth.getter
def birth(self):
return self._birth if __name__ == '__main__':
p=Person()
p.birth=1985
print(p.birth) ------------------运行结果-------------------
1985

 

@.deleter

@property含有一个删除属性的方法

class Person(object):

    @property
def birth(self):
return self._birth @birth.setter
def birth(self,value):
self._birth=value @birth.getter
def birth(self):
return self._birth @birth.deleter
def birth(self):
del self._birth if __name__ == '__main__':
p=Person()
p.birth=1985
print(p.birth)
del p.birth
print(p.birth) ---------------运行结果-----------------
1985 #删除birth属性后,再次访问会报错
AttributeError: 'Person' object has no attribute '_birth'

 

【python】面向对象编程之@property、@setter、@getter、@deleter用法的更多相关文章

  1. Python 面向对象编程之进阶使用

    我们在https://www.cnblogs.com/yinsedeyinse/p/9976280.html中学习了面向对象的编程方法.现在学习他的进阶用法. 1. 静态方法 2. 类方法 3. 属性 ...

  2. Python 面向对象编程之封装的艺术

    1. 面向对象编程 OOP ( Object  Oriented Programming) 即面向对象编程. 面向对象编程是一种编码思想,或是一种代码组织方式.如同编辑文章时,可以选择分段.分节的方式 ...

  3. python面向对象编程之组合

    前面讲了面向类与对象的继承,知道了继承是一种什么"是"什么的关系. 然而类与类之间还有另一种关系,这就是组合 先来看两个例子: 先定义两个类,一个老师类,老师类有名字,年龄,出生的 ...

  4. python 线程之_thread

    python 线程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...

  5. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  6. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  7. python基础-面向对象编程之封装、访问限制机制和property

    面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...

  8. python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod

    python基础-abstractmethod.__属性.property.setter.deleter.classmethod.staticmethod

  9. Python类总结-封装(Property, setter, deleter)

    Property #property #内置装饰器函数,只在面向对象中使用 from math import pi class Circle: def __init__(self,r ): self. ...

随机推荐

  1. dpdk-18.11网卡多队列RSS设置

    背景 最近在做将基于dpdk-16.11.1开发的程序,转移到基于dpdk-18.11版本下开发.遇到了网卡RSS配置的问题,在这里纪录一下. 问题 dpdk-16.11.1 在dpdk-16.11. ...

  2. Net包管理NuGet(3)搭建私服及引用私服的包

    1,打开vs创建项目(ASP.NET WEB空项目)假设命名为MyNuGet 空项目解决方案如图 2,右键引用>管理NuGet程序包>切到浏览搜索NuGet.Server然后安装(3.1. ...

  3. PHP二维数组去重(指定键名)

    本例对二维数组中某个指定键名进行去重,发现网上大多使用array_unique或是foreach遍历等方式去重,效果不佳且较为繁琐. 本文以二维数组去重为引,介绍array_column函数的三种用法 ...

  4. c# 属性改变

    using System.ComponentModel; using System.Threading; using System.Windows.Forms; using app.Viewer.Vi ...

  5. CentOS_7下安装Nginx服务

    安装make: yum -y install gcc automake autoconf libtool make make是一个命令工具,是一个解释makefile中指令的命令工具.它可以简化编译过 ...

  6. debian apt sources

    deb http://debian.csie.ntu.edu.tw/debian/ sid main contrib non-free deb-src http://debian.csie.ntu.e ...

  7. Plctext 如何发送默认的模式

    当切屏指令都没有的情况下,就会发,即:当65这个地址位(0-7),都为零的情况下.

  8. Matlab 中S-函数的使用 sfuntmpl

    function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag) %SFUNTMPL General MATLAB S-Functi ...

  9. (转)ReentrantLock实现原理及源码分析

    背景:ReetrantLock底层是基于AQS实现的(CAS+CHL),有公平和非公平两种区别. 这种底层机制,很有必要通过跟踪源码来进行分析. 参考 ReentrantLock实现原理及源码分析 源 ...

  10. win 10 dpi:150% 与 win 7 dpi:150% 的不同之处

    由于 win 7 和 win 10 的 dpi 处理方式不同,导致我们写的客户端程序在 win 7 上运行正常,在 win 10(dpi:150%)上运行不正常了. 具体的描述,可参考:解决win10 ...