Python类变量继承疑问:子类赋值后父类修改为何不生效?
问题解答
核心原因很简单:当你执行Dog.age = 1时,已经给Dog类本身创建了一个独立的age类变量,它不再继承父类Cat的age了。
具体拆解代码执行的每一步:
- 初始状态:
Cat有类变量age=0,Dog作为子类,自身没有定义age,所以此时访问Dog.age会向上查找父类Cat的age,值为0。 - 执行
Dog.age = 1:这一步不是修改父类的age,而是直接给Dog类新增了属于它自己的age变量。从这时候起,Dog的age和父类Cat的age就变成了两个独立的变量。 - 后续执行
Cat.age = 2:这只会改变Cat自身的age值,但Dog已经有了自己的age变量,所以访问Dog.age时会直接使用自己的,不会再去父类查找。
如果想让Dog始终跟随父类Cat的age变化,不要给Dog直接赋值age。比如去掉Dog.age = 1这行代码,再运行就会输出2 2。
你还可以用hasattr(Dog, 'age')验证这个逻辑:在执行Dog.age =1前,这个方法返回False(说明Dog没有自己的age,是继承父类的);赋值后返回True,证明Dog确实创建了自己的age变量。
内容的提问来源于stack exchange,提问作者user20422675
相关产品推荐
相关产品推荐

