在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理。
假如一个对象一个属性:cat.name = "tom",那么在访问cat.name的时候因为当前对象有这个属性,那么将不会调用__getattr__()方法,而是直接返回了拥有的name属性了
当试图对象的item特性赋值的时候将会被调用。
class Student:
def __init__(self):
self._age = None
def get_age(self):
print(‘获取属性时执行的代码‘)
return self._age
def set_age(self, age):
print(‘设置属性时执行的代码‘)
self._age = age
def del_age(self):
print(‘删除属性时执行的代码‘)
del self._age
age = property(get_age, set_age, del_age, ‘学生年龄‘)
student = Student()
# 查看属性的文档字符串:学生年龄
print(‘查看属性的文档字符串:‘ + Student.age.__doc__)
# 设置属性
student.age = 18
# 获取属性
print(‘学生年龄为:‘ + str(student.age))
# 删除属性
del student.age
class Student:
def __init__(self):
self._age = None
@property
def age(self):
print(‘获取属性时执行的代码‘)
return self._age
@age.setter
def age(self, age):
print(‘设置属性时执行的代码‘)
self._age = age
@age.deleter
def age(self):
print(‘删除属性时执行的代码‘)
del self._age
student = Student()
# 设置属性
student.age = 18
# 获取属性
print(‘学生年龄为:‘ + str(student.age))
# 删除属性
del student.age
python的property(), @property,__setattr__,__getattr__
原文:https://www.cnblogs.com/amize/p/13255202.html