【python】面向对象编程之@property、@setter、@getter、@deleter用法
@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用法的更多相关文章
- Python 面向对象编程之进阶使用
我们在https://www.cnblogs.com/yinsedeyinse/p/9976280.html中学习了面向对象的编程方法.现在学习他的进阶用法. 1. 静态方法 2. 类方法 3. 属性 ...
- Python 面向对象编程之封装的艺术
1. 面向对象编程 OOP ( Object Oriented Programming) 即面向对象编程. 面向对象编程是一种编码思想,或是一种代码组织方式.如同编辑文章时,可以选择分段.分节的方式 ...
- python面向对象编程之组合
前面讲了面向类与对象的继承,知道了继承是一种什么"是"什么的关系. 然而类与类之间还有另一种关系,这就是组合 先来看两个例子: 先定义两个类,一个老师类,老师类有名字,年龄,出生的 ...
- python 线程之_thread
python 线程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- python基础-面向对象编程之封装、访问限制机制和property
面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...
- python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod
python基础-abstractmethod.__属性.property.setter.deleter.classmethod.staticmethod
- Python类总结-封装(Property, setter, deleter)
Property #property #内置装饰器函数,只在面向对象中使用 from math import pi class Circle: def __init__(self,r ): self. ...
随机推荐
- Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤
Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤 1. 引言 Excel任务窗格是一个可以用来存放各种常用命令的侧边窗口(准确的说是一个可以停靠在类名为x ...
- pytorch错误:RuntimeError: received 0 items of ancdata解决
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com RuntimeError: received 0 items of ancdata错误是在datalo ...
- Centos6.5 pppoe-server
[root@localhost network-scripts]# rpm -q rp-pppoepackage rp-pppoe is not installed ----------------- ...
- varnish与squid缓存效率对比实例
前提:安装varnish.squid.webbench(压测工具) 注:varnish和squid机都未安装其他多余服务,服务器绑定域名为www.dannylinux.top (为同一台服务器,测试 ...
- [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分
题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. ...
- Java 8 特性 —— 方法引用
方法引用通过方法的名字来指向一个方法.方法引用可以使语言的构造更紧凑简洁,减少冗余代码.方法引用使用一对冒号 :: .下面,我们在 Car 类中定义了 4 个方法作为例子来区分 Java 中 4 种不 ...
- Httpclient发送json请求
一.Httpclient发送json请求 public String RequestJsonPost(String url){ String strresponse = null; try ...
- 2017-12-20python全栈9期第五天第二节之可变 数据类型和不可变数据类型
- Rancher2.1安装部署
基础环境配置 1.操作系统选择 Ubuntu 16.04(64位 Server版) Centos/RedHat Linux 7.5+(64位) 2.Docker版本选择 1.12.6 1.13.1 1 ...
- markdown 转义字符
\\ 反斜杠 \` 反引号 \* 星号 \_ 下划线 \{\} 大括号 \[\] 中括号 \(\) 小括号 \# 井号 \+ 加号 \- 减号 \. 英文句号 \! 感叹号