博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 内置方法赋值_python 内置方法
阅读量:6361 次
发布时间:2019-06-23

本文共 1442 字,大约阅读时间需要 4 分钟。

1.__getattr__:访问不存在的成员

2.__getattribute__:访问成员的时候默认调用该函数,而一般不会调用__getattr__,只有出现异常,才会转到__getattr__处理。如果要重写该函数,不要使用return self.__dict__[name] ,会造成死循环

3.__setattr__:将等式右边的值赋予左边的成员,调用该方法。

4.__get__:描述符必选,(描述符,存在类的__dict__中的属性)如果类的属性有__get__方法,则该属性的值为__get__返回值;def __get__(self, instance, owner),t.d,,T.d,都调用__get__(self, instance, owner),前者intance为t,owner为T,后者instance为None,owner为T

5.__set__:描述符可选,t.d = value,实际上调用d.__set__(t, value),T.d = value,这是真正的赋值,T.d的值从此变成value。d不再是描述符,而是value;如果描述符没有__set__函数,则赋值也是直接赋值。

6.__delete__:描述符可选,与设置类似

7.__getitem__:可以像list一样使用下标取得元素

8.abc模块:提供抽象类,设定那些类函数必须实现,也可以通过 __subclasshook__方法来实现虚拟方法的检查

备注:

python属性查找策略

1.如果attr是一个Python自动产生的属性,找到!(优先级非常高!)

2.查找obj.__class__.__dict__,如果attr存在并且是data descriptor,返回data descriptor的__get__方法的结果,如果没有继续在obj.__class__的父类以及祖先类中寻找data descriptor

3.在obj.__dict__中查找,这一步分两种情况,第一种情况是obj是一个普通实例,找到就直接返回,找不到进行下一步。第二种情况是obj是 一个类,依次在obj和它的父类、祖先类的__dict__中查找,如果找到一个descriptor就返回descriptor的__get__方法的 结果,否则直接返回attr。如果没有找到,进行下一步。

4.在obj.__class__.__dict__中查找,如果找到了一个descriptor(插一句:这里的descriptor一定是non- data descriptor,如果它是data descriptor,第二步就找到它了)descriptor的__get__方法的结果。如果找到一个普通属性,直接返回属性值。如果没找到,进行下 一步。

5.很不幸,Python终于受不了。在这一步,它raise AttributeError

对属性赋值时的查找策略,对于obj.attr = value

1.查找obj.__class__.__dict__,如果attr存在并且是一个data

descriptor,调用attr的__set__方法,结束。如果不存在,会继续到obj.__class__的父类和祖先类中查找,找到 data

descriptor则调用其__set__方法。没找到则进入下一步。

2.直接在obj.__dict__中加入obj.__dict__['attr'] = value

转载地址:http://jkima.baihongyu.com/

你可能感兴趣的文章
Windows Server 2012 R2 Active Directory(活动目录)实验一
查看>>
android viewpager 无限左右滑动
查看>>
linux下SSH远程连接服务慢解决方案
查看>>
HTML
查看>>
CENTOS7下编译安装PHP-5.4以及配置phpMyAdmin
查看>>
磁盘显示无法访问拒绝访问,里面的资料怎样找到
查看>>
Java之品优购课程讲义_day07(5)
查看>>
Java的新项目学成在线笔记-day3(八)
查看>>
路由简单的实验
查看>>
零基础学习大数据Hadoop需要什么准备?Hadoop如何发展起来的?
查看>>
前端程序员需要具备的几个软实力,你具备了吗
查看>>
RHEL系列网络配置2015083101
查看>>
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
查看>>
雨巷-戴望舒
查看>>
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>
Freebsd的ports命令
查看>>
分布式系统---幂等性设计
查看>>
【转】时钟周期,机器周期,指令周期的区别
查看>>
MYSQL 更新时间自己主动同步与创建时间默认值共存问题
查看>>