-
在获取值的时候,都调用了get,这时候使用类和对象都是一样的
-
但赋值的时候如果用对象调用描述符赋值没有问题,一但用类调用赋值相当于添加了一个类属性,那么之前的描述符也就不起作用了
注意:类属性会覆盖描述符
-
参考代码:
class name_des(object):
def __init__(self):
self.__name = None
def __get__(self, instance, owner):
print('-------get')
return self.__name
def __set__(self, instance, value):
print('-------set')
if isinstance(value, str):
self.__name = value
else:
raise TypeError("必须是字符串")
class Person(object):
name = name_des()
p = Person()
print(p.name)
print(Person.name)
p.name = 'python'
print(p.name)
print(Person.name)
Person.name = 'c++'
print(p.name)
print(Person.name)