在函数中也讲过描述器这个概念,类方法中也能实现,描述器本身也是一个对象,想实现描述器功能有两种方法,下面来分别演示一下。
1.方法1:property
描述器是一个对象,通过__set__();__get__();__delete__()三个方法组成一个对象实现对特定数据的处理和筛选等功能。
class Dog(object):
def __init__(self):
self.__age = 18
def get_age(self):
return self.__age
def set_age(self, val):
if val < 0:
val = 0
self.__age = val
def del_age(self):
del self.__age
age = property(get_age, set_age, del_age) # 这里的age就是一个描述器
d = Dog()
d.set_age(-5)
print(d.get_age())
返回结果:0
2.定义方式2:通过一个类封装描述器
class Age:
def __get__(self, instance, owner):
print('get', instance, owner)
def __set__(self, instance, value):
# print('set', instance, value)
if value > 19:
print('aaa')
else:
print('111')
def __delete__(self, instance):
print('del', instance)
class Dog:
age = Age() # 把描述器直接赋值个属性
d = Dog()
d.age = 5 # 调用描述器中的set
print(d.age) # 调用描述器中的get
返回结果:
111
get <__main__.Dog object at 0x00000000021C5D30> <class '__main__.Dog'>
None