python 名称修饰,描述,property

名称修饰

java和C#等其他高级语言中都有private关键字来修饰一个属性或字段是私有的,但是python中并没有private,而是有个与它接近的概念旧式名称修饰。每当在一个属性前面加上__前缀,解释器就会立刻将其重命名:

直接访问会抛异常

利用dir函数查看内部属性

python内部会把__前缀的属性重命名为【_类名+属性名】;因此在python中如果一个属性不是共有的就约定使用双下划线__为前缀,它不会调用任何名称修饰的算法,只是说名这个属性是该类的私有属性。

幸运的是python中还有其他机制类构建类的私有和共有代码,即使用描述符property这些POP设计的关键特性

插一个小知识点,python中dir和__dict__的区别:https://www.cnblogs.com/zjchao/p/7894477.html

描述符

什么是描述符

python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问。这些方法有 __get__(), __set__(), 和__delete__()。如果这些方法中的任何一个被定义在一个对象中,这个对象就是一个描述符

它是一个类,定义了另一个类的访问方式,即一个类可以将属性管理托管给另一个类

 描述符协议

描述符类基于3个特殊方法,这3个方法组成了描述符协议

    1. __set__(self,obj,type=none)设置属性时调用,也称为setter
    2. __get__(self,obj,value) 读取属性时调用,也称为getter
    3. __delete__(self,obj) 对象调用del时调用这一方法
数据描述符

      实现了__get__()和__set__()的描述符称为数据描述符

非数据描述符

      只实现了__get__()

属性查找顺序

在每次查找属性时,描述符协议的方法实际上是有对象的特殊方法__getattribute__()调用(不是__getattr__()),每次通过点号(instance.attribute)或者getattr(instance,'attribute')函数来执行查找时,都会隐式的调用__getattribute__(),它按下列属性查找该属性:

①.实例属性

②.类属性

③.父类属性

④.__getattr__()方法

https://www.cnblogs.com/Jimmy1988/p/6808237.html

  

猜你喜欢

转载自www.cnblogs.com/gzl420/p/10897667.html