避免setattr的无限循环
时间: 2023-07-04 21:12:31 浏览: 127
在Python中,如果在类的`__setattr__`方法中调用`setattr`方法,可能会导致无限递归,从而导致程序崩溃。为了避免这种情况,可以在`__setattr__`方法中使用`super()`来调用父类的`__setattr__`方法,从而防止无限递归。例如,在以下示例中,我们定义了一个`Person`类,并在`__setattr__`方法中使用了`super()`来调用父类的`__setattr__`方法:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __setattr__(self, name, value):
if name in ['name', 'age']:
super().__setattr__(name, value)
else:
raise AttributeError('Cannot set attribute {}'.format(name))
```
在这个例子中,如果我们试图设置除`name`和`age`以外的任何属性,`__setattr__`方法将引发`AttributeError`异常。使用`super()`调用父类的`__setattr__`方法可以确保我们没有无限循环的风险,因为它会调用父类的`__setattr__`方法而不是当前类的`__setattr__`方法。
阅读全文