Python类与函数学习遇问题:代码输出不符合预期求排查
你的Python类代码错误分析与修正
代码中的核心错误点:
User类构造方法调用错误:
User的__init__里写的super().__init__只是引用了父类构造方法,没有实际执行调用。正确写法是super().__init__(nama),这样才能完成父类的初始化逻辑。另外你在User的__init__里重复赋值self.nama=nama属于冗余操作,父类构造已经会处理这个赋值。printUsername方法缺少实例参数:
Python实例方法的第一个参数必须是self(代表实例本身),你写的def printUsername(nama):里的nama实际接收的是user1这个实例对象,所以打印出了对象地址。正确写法应该是:def printUsername(self): print(self.nama)Data类ganti方法逻辑混乱:
- 私有方法
__private从未被调用,里面的self.ganti="Replace"根本不会执行,目标属性从未被创建; - 方法名
ganti和你要设置的属性名重名,导致方法覆盖了属性;同时方法内self.prvt=self.ganti是把方法本身赋值给变量,打印出了方法对象。
修正方案:修改属性名避免冲突,在ganti方法内先调用私有方法生成属性,再打印:
def __private(self): self._ganti_val = "Replace" def ganti(self): self.__private() print(self._ganti_val)- 私有方法
修正后的完整代码:
class Data: def __init__(self, nama): self.nama = nama def __private(self): self._ganti_val = "Replace" def ganti(self): self.__private() print(self._ganti_val) class User(Data): def __init__(self, nama): super().__init__(nama) def printUsername(self): print(self.nama) user1 = User("Test") user1.printUsername() user1.ganti()
运行输出:
Test
Replace
内容的提问来源于stack exchange,提问作者user512512af
相关产品推荐
相关产品推荐

