导语:
本文主要介绍了关于python描述器的访问顺序的相关知识,包括python中eval函数作用,以及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在最前面。为了了解访问顺序,你不妨运行示例代码测试。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python如何使用def关键字08/17
- ♥ Python模块导入介绍12/25
- ♥ python图像二值化09/30
- ♥ 如何在python中使用find函数08/12
- ♥ 如何在python中写对数11/11
- ♥ 如何在Python中使用IPy模块?12/25
内容反馈