自定义属性的访问 - Customizing attribute access

     在 python 中, 下列方法可以实现类实例属性 instance.attribute 的 使用,设置,删除.
object.__getattr__(self, name)
找不到 attribute 的时候被调用(__dict__ 属性中找不到的时候),
例如, 所调用的 attribute 不是 instance.attribute, 或者类中没有这个 attribute,
即 self.attribute 找不到. 该方法返回的是的 attribute 的 value, 或者
raise AttributeError 异常. Note,
如果 attribute 存在 __dict__ 中, __getattr__ 是不会被调用的.
这一点体现了 __getattr__ 与 __setattr__ 的非对称调用, 这种不
对称是 python 故意儿为之, 原因有二,
a, 为了效率的原因 - 找到 attribute 后,无需浪费资源再'向上(MRO)'查找.
b, 如果不这样做 __getattr__ 将无法访问 instance 的其他 attributes.
至少对于 instance variables 来说, 可以通过在 __dict__ 中插入变量的值来实现,
__dict__[variables] = value,从而得到对该 variables 的访问及控制(total control).
上面这样这种做法, 在 python doc 中被称为 'fake total control', 相对应的后面将
介绍的 __getattribute__ 方法被称作'actually get total control'. object.__getattribute__(self, name)
在获取 instances.attribute 的时候无条件的被调用.
如果在 instances 所属的 class 中定义了 __getattr__ 方法, __getattr__ 将不会被调用,
除非在 __getattribute__ 方法中显示的调用 __getattr__, 或者 __getattribute__ 方法
raises AttributeError 异常.
为防止无线的递归, 调用 __getattribute__ 方法的时候应该保证始终在 instances 的基类上调用.
Note,
有种情况可能绕过此方法,即 通过 隐式调用 或 built-in 方法调用'特殊方法'的时候,
详见 '对特殊方法的访问 - Special method lookup' 一文.
              http://www.cnblogs.com/zzyzz/p/7743687.html
object.__setattr__(self, name, value)
当试图设置 attributes 的时候 __setattr__ 将被调用(instances.attribute = value),
从而代替 normal mechanism - __dict__[variables] = value
当 __setattr__ 要为一个 instance 的名字为 name 的 attribute 设置成值为 value 的时候,
实际上应该保证调用的是基类的 __setattr__ 方法, object.__setattr__(self, name, value). object.__delattr__(self, name)
跟 __setattr__ 像类似, __delattr__ 用在删除 instances.attribute 的时候.
del instances.attribute object.__dir__(self)
当对一个对象调用 dir(object) 方法的时候 __dir__ 被调用.
返回值是一个被 list 化, 并 sort 的序列. Summarize,
其实 Customizing attribute access 跟 descriptor 关系紧密, 是描述符协议的前提,
可以将两者放在一起学习. Reference,
Customizing attribute access
https://docs.python.org/3/reference/datamodel.html#customizing-attribute-access descriptors
https://docs.python.org/3/reference/datamodel.html#descriptors

自定义属性的访问 - Customizing attribute access的更多相关文章

  1. NXP Mifare S50标准IC卡- 访问位(Access Bits) 分析

    Mifare S50 标准IC卡有1K 字节的EEPROM,主要用来存储数据和控制信息.1K 字节的EEPROM分成16 个区,每区又分成4 段,每1段中有16 个字节.每个区的最后一个段叫“尾部&q ...

  2. 访问修饰符(access modifier)。

    1)public(公共的):被 public所修饰的属性和方法可以被有类访问. 所修饰的属性和方法可以被有类访问. 2)protected (受保护的):被protected所修饰的属性和方法可以在类 ...

  3. Java 多并发之原子访问(Atomic Access)

    在编程中,一个原子操作是只会出现一次的.一个原子操作在中间不会停止:要么全部发生要么一点也不发生.我们只有在原子操作完成之后才会看到原子操作的具体影响. 甚至是非常简单的表达式能够构造分解为简单操作的 ...

  4. 如何访问局域网的Access数据库?

    1]用共享打印机来打开文件共享, 2]把Access文件.mdb所在的文件夹 共享,然后其他的就和本地一样了. 设置如下: Data Source="\\192.168.7.49\user\ ...

  5. 在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查

    声明:百度以外的公司可以自由转载该文. 正如我上一篇博文提到,ADO这货和MFC没有任何关系,ADO 是一个独立的组件.所以为了使用ADO 我们就要把ADO引入到MFC中. ADO是硬盘上的表现形式是 ...

  6. 条款15:在资源管理类中提供对原始资源的访问(Provide access to raw resources in resource-managing classes)

    NOTE: 1.APIs往往要求访问原始资源(raw resources),所以每一个RAII class应该提供一个“取得其所管理之资源”的办法. 2.对原始资源的访问可能经由显示转换或隐式转换.一 ...

  7. HTTP访问控制模块(HTTP Access)

    ·摘要这个模块提供简单的基于主机的访问控制.ngx_http_access_module这个模块可以详细的检查客户端IP,并且按顺序执行第一条匹配的规则.如下例: location / {  deny ...

  8. 访问mysql出现“Access denied for user root@localhost”(using password:NO)解决方案

    首先声明,出现这个提示的原因有很多,以下只针对我遇到的一种情况 使用解压缩版安装mysql的时候,data文件夹是自己新建的,my-default.ini也是自己配置的,这时直接启动mysql服务的时 ...

  9. 访问mysql出现Access denied for user 'root'@'的解决方法

    1.关闭mysql的服务 方法一:我的电脑右键-管理-服务和应用程序-服务,找到mysql,右键关闭 方法二:cmd进入命令提示符,service mysqld stop(这个是网上的方法,我试了一下 ...

随机推荐

  1. FullPage.js-基于 jQuery 的插件全屏滚动插件

    fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站.如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容, ...

  2. CTPN中anchors代码

    import numpy as np def generate_basic_anchors(sizes, base_size=16): #base_anchor([0,0,15,15]) base_a ...

  3. FNScanner二维码接口openView自定义扫码Demo

    本文出自APICloud官方论坛 FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版.在 iOS 平台上本模块底层集成了 Zbar 和系统自带的条形码/二维码分析 ...

  4. Spring学习记录3——Spring AOP

    SpringAOP基础 AOP简介: AOP是Aspect Oriented Programing的简称,翻译为“面向切面编程”.它适用于具有横切逻辑的应用场合,如性能检测,访问控制,事务管理及日志记 ...

  5. Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件

    MyBatis 今天大年初一,你在学习!不学习做什么,斗地主...人都凑不齐.学习吧,学习使我快乐!除了诗和远方还有责任,我也想担当,我也想负责,可臣妾做不到啊,怎么办?你说怎么办,为啥人家能做到你做 ...

  6. WeihanLi.Npoi 根据模板导出Excel

    WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...

  7. Browser Security-css、javascript

    层叠样式表(css) 调用方式有三种: 1 用<style> 2 通过<link rel=stylesheet>,或者使用style参数. 3 XML(包括XHTML)可以通过 ...

  8. VSCODE更改文件时,提示EACCES permission denied的解决办法(mac电脑系统)

    permission denied:权限问题 具体解决办法: 1.在项目文件夹右键-显示简介-点击右下角解锁 2.权限全部设置为读与写 3.最关键一步:点击"应用到包含的项目",这 ...

  9. 安全性与收尾工作 创建基本的安全策略 精通ASP-NET-MVC-5-弗瑞曼

  10. html恶搞之无限弹窗

    啦啦啦啦啦 恶搞别人吗? 把下面代码做成html文件发给别人,用浏览器打开就可以看见效果了 <!DOCTYPE html> <html><head><meta ...