一、方法介绍
__setattr__ (对象.属性)拦截
二、使用步骤
1.定义一个类
代码如下(示例):
class NotStrException(BaseException): # 自定义异常
def __init__(self,msg):
self.msg = msg
class Person(object):
def __init__(self, name):
self.name = name
def __setattr__(self, key, value):
if not isinstance(value, str): # isinstance 是不是str的对象 issubclass() 是不是这个类的子类
raise NotStrException('必须为字符串')
super(Person, self).__setattr__(key,value)
# setattr(self,key,value) 这里会产生递归报错,因为 setattr的本质是self.key=value
# self.__dict__[key]=value
p = Person('ggff')
p.hobby = '打篮球'
print(p.hobby)
p.age=22 # 这里会报错,因为不是str对象
总结
__setattr__,__getattr__ 是动态存取属性,通常出现是成对出现。这里只实现了一个。
下一期我们会学习__getitem__,__setitem__魔法方法