标签:sel attr 查找 init 添加 att 分离 property desc
??在解释属性查找顺序之前我们需要了解Python中的属性描述符,属性描述符作为其他类对象的属性而存在,实现了特殊方法中的get、set、delete中的一种即可称作属性描述符。
其中只实现了__get__()的称作非数据描述符,实现了__get__()和__set__()方法的称作数据描述符。
class Data():
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
def __delete__(self, instance):
pass
class NoneData():
def __get__(self, instance, owner):
pass
??在实际项目的开发中我们有时候需要去将自己的逻辑(方法)变成属性来调用,也就是我们常说的@property动态属性。
import numbers
class User:
def __init__(self):
pass
@property
def age (self):
return self.__userage
@age.setter
def age(self,value):
if isinstance(value,numbers.Integral):
self.__userage = value
else:
raise ValueError
if __name__ == '__main__':
user = User()
user.age = 30
print(user.age)
??读到这,肯定很多人者都会有一个疑问,那属性描述符还有什么用呢?我们在设计User类的时候,肯定不只有age这一个属性,如果再加上其他信息属性,那么就会出现大量的@property修饰的方法在同一个类,这是不符合设计原则的,代码的分离性和可读性大大降低。这时候属性描述符就能起到很大的帮助了。
class AgeAttr:
def __get__(self, instance, owner):
return self.__userage
def __set__(self, instance, value):
if isinstance(value,numbers.Integral):
self.__userage = value
else:
raise ValueError
def __delete__(self, instance):
pass
class User:
age = AgeAttr()
def __init__(self):
pass
import numbers
if __name__ == '__main__':
user = User()
user.age =25
print(user.age)
关于属性的查找顺序请看这>属性查找顺序
标签:sel attr 查找 init 添加 att 分离 property desc
原文地址:https://www.cnblogs.com/levylovepage/p/11331280.html