知行编程网知行编程网  2023-01-06 05:00 知行编程网 隐藏边栏  3 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python描述器的访问顺序的相关知识,包括python中eval函数作用,以及python 排序这些编程知识,希望对大家有参考作用。

python描述符的访问顺序



本文教程操作环境:

windows7系统、Python 3.9.1,DELL G3电脑。



1、顺序说明


数据描述符 > 实例属性 > 非数据描述符;实例属性 > 类属性。

当有描述符时,类实例的查找属性顺序是:先检查类或父类中是否有数据描述符属性,如果有,则先访问数据描述符,如果没有数据描述符—— -> 然后会去自己实例的dict属性中查找,如果在dict属性中没有找到--> 然后会在类或者父类的非数据描述符中查找。



2、实例

# 例子二
class A:
    def __init__(self):
        self.x = 1
 
    def __get__(self, instance, owner):
      """
      以下两个参数都是「必须参数」,约定使用
      instance: 描述器所在类的实例
      owner:调用描述器的类
      """
        return self.x
 
    def __set__(self, instance, value):
      """
      以下两个参数都是「必须参数」,约定使用
      instance: 描述器所在类的实例
      value:用来设置属性的值
      """
        self.x = value
        
    def __delete__(self, instance):
      """
      以下参数是「必须参数」,约定使用
      instance: 描述器所在类的实例
      """
      pass
 
 
class B:
    def __init__(self):
        self.x = 1
 
    def __get__(self, instance, owner):
        return self.x
 
 
class C:
    a = A()
    b = B()
 
    def __init__(self, a, b):
        self.b = a
        self.b = b


上面在


C类中分别定义了数据描述符和非数据描述符a、b以及同名的实例属性。进行如下输出测试,发现实例c只有实例属性b,没有实例属性a,说明确实是一个数据描述符,即屏蔽了类属性a




以上是python描述符的访问顺序。如果怕内存混乱,可以记住data accessor在最前面。为了了解访问顺序,你不妨运行示例代码测试。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享