Python打印自定义类实例属性时返回内存地址无法获取目标值
问题解答
问题原因
你传入Dog构造方法的owner参数是Person类的实例对象,因此dog.owner存储的是完整的Person实例,而非单独的主人姓名字符串。Python打印自定义类实例时,默认输出格式为<模块名.类名 object at 内存地址>,这就是你看到的异常输出的来源。
解决方案
方案1:直接访问实例的姓名属性
Person实例的姓名存在自身的name属性中,调整打印语句即可拿到目标值:
# 原语句 print(dog.owner) 修改为 print(dog.owner.name)
执行后输出:
Mick Jagger
方案2:自定义类的字符串表示(推荐的面向对象实现方式)
如果需要直接打印dog.owner就能得到可读的姓名,可以在Person类中实现__str__方法,自定义实例被转为字符串时的返回值:
class Person(): def __init__(self,name): self.name = name def __str__(self): return self.name mick = Person("Mick Jagger") dog = Dog("Stanley","French Bulldog",mick) # 不需要修改原打印语句,直接输出姓名 print(dog.owner)
运行后同样会输出Mick Jagger,这种写法更符合面向对象的封装逻辑,后续需要调整Person实例的打印格式时,只需要修改__str__方法即可,不需要改动所有调用打印的代码。
内容的提问来源于stack exchange,提问作者Elix
相关产品推荐
相关产品推荐

