Python多继承实例调用方法后无法打印level属性更新值问题
问题说明
直接打印Python类的实例对象时,默认输出的是对象所属类、内存地址的默认标识字符串,不会自动输出实例的所有属性值,因此执行print(p)无法得到更新后的level属性值。
原运行代码如下:
class Freelencer: company="google" level=0 def upgradelevel(self): self.level=self.level+1 class Employee: company="visa" ecode=120 class Programmer(Freelencer,Employee): name="rohit" p=Programmer() p.upgradelevel() print(p)
上述代码默认运行输出格式类似<__main__.Programmer object at 0x000001F8A3D71D90>,不会展示level属性的具体值。
解决方案
- 方案1:直接访问实例的level属性打印,将最后一行代码修改为
print(p.level),运行后即可输出更新后的结果1,是最简单直接的实现方式。 - 方案2:如果需要直接打印实例p时就输出自定义的属性信息,可以在类中定义
__str__特殊方法,自定义实例转字符串的返回规则,修改后的示例代码如下:
class Freelencer: company="google" level=0 def upgradelevel(self): self.level=self.level+1 class Employee: company="visa" ecode=120 class Programmer(Freelencer,Employee): name="rohit" def __str__(self): return f"name: {self.name}, level: {self.level}, company: {self.company}, ecode: {self.ecode}" p=Programmer() p.upgradelevel() print(p)
运行修改后的代码,会直接输出拼接好的属性内容,其中level的值为调用方法后更新的1。
补充提示:当前代码的多继承属性查找顺序为
Programmer→Freelencer→Employee,因此直接访问p.company会拿到父类Freelencer中定义的"google",如果需要获取Employee类的company属性,需要显式通过类名访问。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

