python入门——P45魔法方法:属性访问
下面是通过property访问属性的用法
class C():def __init__(self, size=10):self.size = sizedef getsize(self):return self.sizedef setsize(self, value):self.size = valuedef delsize(self):del self.sizex = property(getsize, setsize, delsize)c1 = C()print(c1)
print(c1.x)c1.x = 20
print(c1.x)del c1.x
print(c1.x)
<__main__.C object at 0x0000021692D799C8>
10
20
AttributeError: 'C' object has no attribute 'size'
__getattr_:定义用户当获取一个不存在的属性时的行为
__getattribute_:定义当该类的属性被访问时的行为
__setattr_:定义一个属性被设置时的行为
__delattr_:定义一个属性被删除时的行为
属性访问魔法方法的调用顺序,代码如下:
class C():def __getattribute__(self, name):print("getattribute")return super().__getattribute__(name)def __getattr__(self, name):print("getattr")def __setattr__(self, name, value):print("setattr")super().__setattr__(name, value)def __delattr__(self, name):print("delattr")super().__delattr__(name)c1 = C()c1.xc1.x = 10c1.xdel c1.x
getattribute
getattrsetattrgetattributedelattr
通过重写__getattr__使得当属性为square时只要传入一个值,就可以设定长宽两个变量,代码如下:
class Rectangle():def __init__(self, width=0, height=0):self.width = widthself.height = heightdef __setattr__(self, name, value):if name == "square":self.width = valueself.height = valueelse:super().__setattr__(name, value)def getArea(self):print(self.width * self.height)r1 = Rectangle(5, 6)
r1.getArea()r1.square = 10
r1.getArea()
30
100
python入门——P45魔法方法:属性访问相关推荐
- python入门——P41魔法方法:构造和析构
魔法方法总是被双下划线包围 魔法方法是面向对象Python的一切 魔法方法的强大,体现在他们总能在合适的时候自动调用 __init__(self[, -]) 在实例被构造初始就需要属性,对一个对象进行 ...
- 045魔法方法:属性访问
属性访问: __getattr__(self,name) 定义当用户试图获取一个不存在的属性时的行为 __getattribute__(self,name) 定义当该类的属性被访问时的行为 _ ...
- python入门——P47魔法方法:定制序列
容器类型的协议 希望容器不可变,则只需定义__len_()和__getitem_()方法 如果希望容器可变,除了上面两个,还需要__setitem_()和__delitem_()两个方法 编写一个不可 ...
- python入门——P48魔法方法:迭代器
迭代 上一次的输出,作为下一次的输入,返回自身,代码如下 dic = {"00":"a", "01":"b", &quo ...
- python入门——P43魔法方法:算数运算2
改写魔法方法,下发代码把int类的加减进行了互换 class New_num(int):def __add__(self, other):return int.__sub__(self, other) ...
- python入门——P42魔法方法:算数运算1
下面是算数运算的一些魔法方法 我们接下来可以做个小改变 class New_num(int):def __add__(self, other):return int.__sub__(self, oth ...
- python入门——P46魔法方法:描述符(Property的原理)
描述符 描述符就是将某种特殊类型的类的实例,指派给另一个类的属性. 特殊类型: __get_(self, instance, owner) 用于访问属性,返回属性的值 __set_(self, ins ...
- python入门——P44魔法方法:简单定制
写个计时器的类 import time as t class Mytimer():def __init__(self):self.unit = ["year", "mou ...
- Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法
Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...
最新文章
- 如何构造充填图元_每日一练36:关于如何在Revit中使用自适应族创建矩形无缝曲面幕墙嵌板的方法...
- VTK:图表之ColorVertexLabels
- 阿里凑单算法首次公开!打包购商品挖掘系统解析
- SVD原理及其应用导论
- 重磅!这个生信神器助你文章秒出图——miRNA与基因互作数据库
- 1004.串口收发数据集成bug
- 移动安全大讲堂:整体解决方案之Android加固保护
- 联合多企业成立泛娱乐IP联盟 迅雷将打造新内容消费生态
- CentOS下安装配置MySQL8.0的步骤详解
- 常用输入法快速输入自定义格式的时间和日期(搜狗/QQ/手心/微软拼音)
- 【冯·诺依曼体系结构】
- 简要介绍各种键盘布局
- java offset什么意思_java – “offset或count可能接近-1 1”这是什么意思
- Python环境下用中文做了个《王者荣耀》AI脚本,附视频
- 为什么家里的wifi连接上但用不了
- 什么是真正的转运?常见的五种转运方法
- 论 *.pdm 文件的正确打开方式
- java 同步和异步
- Linux环境打包Qt程序并部署到Docker容器
- android pdf编辑,Foxit PDF SDK
热门文章
- toastr-min.css,Toastr插件提示框使用说明
- python读取配置文件获取所有键值对_python读取配置文件 变量 ConfigParser模块
- sqlite bool mysql_MySQL/SQLite-数据库常用字段类型使用
- python爬虫网络中断_python爬虫项目设置一个中断重连的程序的实现
- 分奇偶数c语言_小白学写字(C语言)
- 20155220 2016-2017-2《Java程序设计》第五周学习总结
- 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
- eclipse 版本 查看
- 用ZedGraph作图表(一)
- 为什么民营银行,农村商业银行存款,定期存款利率比五大行还高?