下面是通过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魔法方法:属性访问相关推荐

  1. python入门——P41魔法方法:构造和析构

    魔法方法总是被双下划线包围 魔法方法是面向对象Python的一切 魔法方法的强大,体现在他们总能在合适的时候自动调用 __init__(self[, -]) 在实例被构造初始就需要属性,对一个对象进行 ...

  2. 045魔法方法:属性访问

    属性访问: __getattr__(self,name)   定义当用户试图获取一个不存在的属性时的行为 __getattribute__(self,name)   定义当该类的属性被访问时的行为 _ ...

  3. python入门——P47魔法方法:定制序列

    容器类型的协议 希望容器不可变,则只需定义__len_()和__getitem_()方法 如果希望容器可变,除了上面两个,还需要__setitem_()和__delitem_()两个方法 编写一个不可 ...

  4. python入门——P48魔法方法:迭代器

    迭代 上一次的输出,作为下一次的输入,返回自身,代码如下 dic = {"00":"a", "01":"b", &quo ...

  5. python入门——P43魔法方法:算数运算2

    改写魔法方法,下发代码把int类的加减进行了互换 class New_num(int):def __add__(self, other):return int.__sub__(self, other) ...

  6. python入门——P42魔法方法:算数运算1

    下面是算数运算的一些魔法方法 我们接下来可以做个小改变 class New_num(int):def __add__(self, other):return int.__sub__(self, oth ...

  7. python入门——P46魔法方法:描述符(Property的原理)

    描述符 描述符就是将某种特殊类型的类的实例,指派给另一个类的属性. 特殊类型: __get_(self, instance, owner) 用于访问属性,返回属性的值 __set_(self, ins ...

  8. python入门——P44魔法方法:简单定制

    写个计时器的类 import time as t class Mytimer():def __init__(self):self.unit = ["year", "mou ...

  9. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

最新文章

  1. 如何构造充填图元_每日一练36:关于如何在Revit中使用自适应族创建矩形无缝曲面幕墙嵌板的方法...
  2. VTK:图表之ColorVertexLabels
  3. 阿里凑单算法首次公开!打包购商品挖掘系统解析
  4. SVD原理及其应用导论
  5. 重磅!这个生信神器助你文章秒出图——miRNA与基因互作数据库
  6. 1004.串口收发数据集成bug
  7. 移动安全大讲堂:整体解决方案之Android加固保护
  8. 联合多企业成立泛娱乐IP联盟 迅雷将打造新内容消费生态
  9. CentOS下安装配置MySQL8.0的步骤详解
  10. 常用输入法快速输入自定义格式的时间和日期(搜狗/QQ/手心/微软拼音)
  11. 【冯·诺依曼体系结构】
  12. 简要介绍各种键盘布局
  13. java offset什么意思_java – “offset或count可能接近-1 1”这是什么意思
  14. Python环境下用中文做了个《王者荣耀》AI脚本,附视频
  15. 为什么家里的wifi连接上但用不了
  16. 什么是真正的转运?常见的五种转运方法
  17. 论 *.pdm 文件的正确打开方式
  18. java 同步和异步
  19. Linux环境打包Qt程序并部署到Docker容器
  20. android pdf编辑,Foxit PDF SDK

热门文章

  1. toastr-min.css,Toastr插件提示框使用说明
  2. python读取配置文件获取所有键值对_python读取配置文件 变量 ConfigParser模块
  3. sqlite bool mysql_MySQL/SQLite-数据库常用字段类型使用
  4. python爬虫网络中断_python爬虫项目设置一个中断重连的程序的实现
  5. 分奇偶数c语言_小白学写字(C语言)
  6. 20155220 2016-2017-2《Java程序设计》第五周学习总结
  7. 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
  8. eclipse 版本 查看
  9. 用ZedGraph作图表(一)
  10. 为什么民营银行,农村商业银行存款,定期存款利率比五大行还高?