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

__getattribute__(self,name)
  定义当该类的属性被访问时的行为

__setattr__(self,name,value)
  定义当用一个属性被设置时的行为

__delattr__(self,name)
  定义当用一个属性被删除时的行为

例:>>> class C:
  ...     def __getattribute__(self, name):
          # 使用 super() 调用 object 基类的 __getattribute__ 方法
  ...         print('getattribute')
  ...         return super().__getattribute__(name)
  ...     
  ...     def __setattr__(self, name, value):
  ...         print('setattr')
  ...         super().__setattr__(name, value)
  ...     def __delattr__(self, name):
  ...         print('delattr')
  ...         super().__delattr__(name)
  ...     def __getattr__(self, name):
  ...         print('getattr')
  ...
  >>> c = C()
  >>> c.x
  getattribute
  getattr
  >>> c.x = 1
  setattr
  >>> c.x
  getattribute
  1
  >>>del c.x
  delattr

练习:
写一个矩形类,默认有宽和高两个属性;
如果为一个叫square的属性赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长。
class Rectangle:
    def __init__(self, width=0, height=0):
        self.width = width
        self.height = height
 
    def __setattr__(self, name, value):
        if name == 'square':
            self.width = value
            self.height = value
        else:
            self.__dict__[name] = value   #注意,避免进入死循环
 
    def getArea(self):
        return self.width * self.height

转载于:https://www.cnblogs.com/wangjiaxing/p/4896672.html

045魔法方法:属性访问相关推荐

  1. 技术图文:Python魔法方法之属性访问详解

    背景 今天在B站学习"零基础入门学习 Python"中的第45节"魔法方法:属性访问",这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的 ...

  2. Python类属性访问的魔法方法

    Python类属性访问的魔法方法: 1. __getattr__(self, name) - 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name) ...

  3. python入门——P45魔法方法:属性访问

    下面是通过property访问属性的用法 class C():def __init__(self, size=10):self.size = sizedef getsize(self):return ...

  4. python魔法方法和普通方法_Python魔法方法之属性访问详解!

    练习要求: 写一个矩形类,默认有宽和高两个属性. 如果为一个叫square的属性赋值赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长. 技术分析 我们先来看看有关于属性的四个 ...

  5. 类属性,实例属性,私有属性,类方法,实例方法,静态方法,私有方法,魔法方法

    实例对象可以调用实例方法/属性.静态方法.类方法/属性,类对象只能调用静态方法和类方法/属性 dir()函数不带参数时,返回当前范围内的变量.方法和定义的类型列表 dir()函数带参数时会返回该参数的 ...

  6. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )

    文章目录 一.ASTTransformation#visit 方法中访问 Groovy 类.方法.字段.属性 二.完整代码示例及进行编译时处理的编译过程 1.Groovy 脚本 Groovy.groo ...

  7. 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )

    文章目录 前言 一.方法表结构 二.方法计数器 三.方法表数据解析 ( init 构造方法 ) 1.方法访问标志 2.方法名称索引 3.方法返回类型 4.方法属性数量 前言 上一篇博客 [Java 虚 ...

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

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

  9. C++和Java的属性访问和方法调用 效率比较

    属性访问----C++快于Java JVM访问对象属性时(字节码OP_IGET_/OP_SGET_),会先通过属性名字字符串去查ClassObject元数据中属性的偏移(通过属性名字符串找到Class ...

最新文章

  1. python 运行java jar包,从Python运行javajar文件的最快方法?
  2. win10删除开机密码_新版WIN10 如何取消开机密码的操作
  3. canvas用2d渲染出3d的感觉
  4. 坚持c++,真正掌握c++(4)
  5. solr7.4 centos7安装
  6. [Linux]Linux下经常会用到的简单实例(持续更新)
  7. python从文件初始化失败怎么办_尝试打开.csv文件时出现“从文件初始化失败”错误(这根本没有问题)...
  8. hive 如果表不存在则创建_Hive DDL
  9. Hadoop基础教程之搭建开发环境及编写Hello World
  10. ZwQuerySystemInformation 枚举驱动模块
  11. 数字信号处理实验matlab,数字信号处理实验Matlab代码
  12. Airbus TETRA集群通信助力大西北城市地铁运营
  13. 迅雷启动慢 解决方法
  14. python 爬取糗百
  15. html项目的致谢词,论文致谢词(精选10篇)
  16. Empty4Raycast 空白背景图片点击
  17. C++ accumulate函数介绍、具体案例
  18. linux查询当前时间
  19. 【爆炸总结】NOIp2017赛(Bao)后(Zha)总结
  20. VPS SPS PPS

热门文章

  1. python tkinter 循环显示文本_Python简易音乐播放器
  2. VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VMware Workstati
  3. 风雨彩虹,铿锵玫瑰——女足夺冠
  4. 我的Go+语言初体验——【四、版本更新环境变量配置】
  5. 在linux命令下导出导入.sql文件的方法
  6. Python编程专属骚技巧1
  7. ORACLE TEXT FILTER PREFERENCE(四)
  8. [学习笔记]带修改主席树
  9. TMD 这个写笔记的号,盗了有意思吗
  10. 关于CoordinatorLayout的用法——复杂交互的克星