大家好,关于setattr的疑惑,真诚感谢!
在重写setattr魔法方法的时候,为了避免无限递归,最后要调用object类的__setattr__魔法方法,通常都是这样写:super().__setattr__(name,value),为什么不是这样写呢:super().__setattr__(self,name,value)?我的疑惑是子类调用了父类的魔法方法,那为什么不告诉父类这是要为子类的对象(传self参数)的属性成功完成赋值呢?万望解答!(super().__init__(),也是这个道理,为什么不告诉父类的方法,我要为子类的实例化对象做初始化操作呢?) 本帖最后由 肖-肖 于 2021-4-8 16:30 编辑你自己都说了:要调用object类的__setattr__方法,object是所有类的父类。
然而super(),Super就是超级,超类,也就是父类的意思。
因为这个继承关系是默认的所以不会写extends
既然继承了且有这个方法且是它的父类,所以不必说:告诉父类这是要为子类的对象的属性成功完成赋值
你只需要使用继承于父类的方法为自己创建的属性和名字赋值即可了!
也就是说:在哪个类里面写的就是为谁设置的!{:5_110:} 肖-肖 发表于 2021-4-8 16:28
你自己都说了:要调用object类的__setattr__方法,object是所有类的父类。
然而super(),Super就是超级,超类 ...
是不是也可以这么理解,子类调用父类的方法,子类的实例化对象把自己传递给父类方法的self?
谢谢了 123Marchapril 发表于 2021-4-8 20:31
是不是也可以这么理解,子类调用父类的方法,子类的实例化对象把自己传递给父类方法的self?
谢谢了
可以这么理解,如果有反例的话欢迎反驳哈~ 肖-肖 发表于 2021-4-8 20:43
可以这么理解,如果有反例的话欢迎反驳哈~
您找到反例了也记得留个言,让我瞧瞧{:5_109:}辛苦~
页:
[1]