这篇文章我们将会了解到类的整个实例化过程。
property动态属性
1 | from datetime import date, datetime |
@property装饰器负责把一个方法变成属性调用。 把一个getter方法变成属性,只需要加上@property就可以了,此时@property本身又创建了另一个装饰器@age.setter,负责把一个setter方法变成属性赋值。
参考文章:http://python.jobbole.com/80955/
___getattr__
和__getattribute__
的区别
___getattr__
是在属性查找不到的时候进行的调用
1 | from datetime import date, datetime |
这样我们就可以在查找不到的时候做一些操作。
1 | from datetime import date |
上面代码我们虽然没有设置name属性,按时info里面有,我们通过这种操作完成了查询、
__getattribute__
是在查询任何属性的时候都调用
__getattribute__
是非常可怕的,无论属性是否存在在查找的时候都会调用,不建议使用。
1 | class User: |
属性描述符和属性查找过程
描述符是对多个属性运用相同存取逻辑的一种方式。例如,Django ORM 和 SQL Alchemy
等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应
起来。
描述符是实现了特定协议的类,这个协议包括 __get__
、__set__
和 __delete__
方
法。property 类实现了完整的描述符协议。通常,可以只实现部分协议。其实,我们在
真实的代码中见到的大多数描述符只实现了 __get__
和 __set__
方法,还有很多只实现
了其中的一个。
描述符是 Python 的独有特征,不仅在应用层中使用,在语言的基础设施中也有用到。除
了特性之外,使用描述符的 Python 功能还有方法及 classmethod 和 staticmethod 装饰
器。理解描述符是精通 Python 的关键。本章的话题就是描述符。
实现了 __get__
、__set__
或 __delete__
方法的类是描述符。描述符的用法是,创建
一个实例,作为另一个类的类属性。
1 | import numbers |