属性访问
def __setattr__(self,name,value):self.name=value+1
这个self.name=value+1会出发无限递归
但
class C:
def __setattr__(self,name,value):
value+=1
super().__setattr__(name,value)
就能够运行处结果,不都是赋值操作吗?为什么第二种不会出发无线递归 第一种的=还是在调用自己,第二种则是调用了 object 的方法。 本帖最后由 Twilight6 于 2020-6-16 12:41 编辑
第一个是调用自己的 __setattr__ 方法
而第二个调用的是父类的 __setattr__ 所以当代码运行到这就去找父类的 __setattr__方法了
而不是找自己的 __setattr__ 方法所以不会无限递归了~ Twilight6 发表于 2020-6-16 12:40
第一个是调用自己的 __setattr__ 方法
而第二个调用的是父类的 __setattr__ 所以当代码运行到这就去 ...
也就是说第二个调用了后面的super().__setattr__(name,value)方法吗 今天的我更强了 发表于 2020-6-16 17:24
也就是说第二个调用了后面的super().__setattr__(name,value)方法吗
应该是说调用了基类(也称可父类) 的 方法
Python 中如果没有设置继承,那么默认继承都是 object 类也就是基类,基类有__setattr__(name,value) 这个魔法方法,这里就是调用基类的 __setattr__(name,value)方法 Twilight6 发表于 2020-6-16 17:27
应该是说调用了基类(也称可父类) 的 方法
Python 中如果没有设置继承,那么默认继承都是 object 类 ...
懂了 谢谢
页:
[1]