Python OOP中用一个对象方法修改另一不同类对象属性失败如何解决?
代码问题分析
second类的change_first方法没有设计入参,无法接收待处理的另一个类的实例对象,无法跨对象操作属性- 方法内部的
name="not first"仅为局部变量赋值,既没有绑定到当前实例的属性,也没有指向待修改的obj1的name属性,不会对外部对象产生任何影响 - 代码全程没有调用
obj2.change_first方法,定义的修改逻辑不会自动执行 - 额外规范问题:Python的类名推荐使用大驼峰命名法,更符合通用编码规范
修正方案
方案1:符合你原本想实现的「obj2调用自身方法修改obj1的属性」的需求
class First: name = "first" class Second: def change_first_name(self, target_obj, new_value): # 直接修改传入的目标对象的name属性 target_obj.name = new_value obj1 = First() obj2 = Second() # 调用obj2的方法,传入obj1作为处理对象 obj2.change_first_name(obj1, "not first") print(obj1.name) # 输出结果为:not first
方案2:完全匹配你给出的obj1.method(obj2.property)参考语法
class First: name = "first" def update_self_name(self, input_property): self.name = input_property class Second: name = "second" obj1 = First() obj2 = Second() # 完全匹配参考语法,obj1调用自身方法,传入obj2的属性作为参数 obj1.update_self_name(obj2.name) print(obj1.name) # 输出结果为:second
内容的提问来源于stack exchange,提问作者Maria M
相关产品推荐
相关产品推荐

