Python打印pessoa对象时输出内存地址而非预期内容的问题
解决Python打印对象显示内存地址而非属性内容的问题
嘿,这个问题其实挺常见的——Python默认情况下,当你直接打印自定义类的对象时,只会输出类名和对象的内存地址,也就是你看到的<__main__.pessoa object at 0x7f505f1c8710>这种格式。要让print(p)输出对象的实际属性内容,你只需要在pessoa类里重写__str__或者__repr__方法就行,这两个方法专门用来定义对象的字符串表示形式。
方法一:重写__str__方法(面向用户的友好输出)
__str__方法的作用是返回可读性强的字符串,适合普通用户查看。你可以在pessoa类中添加这段代码:
def __str__(self): return f"Pessoa信息:\n姓名: {self._Nome}\n年龄: {self._Idade}\nCPF: {self._CPF}\n国籍: {self._Nacionalidade}"
方法二:重写__repr__方法(面向开发者的调试输出)
__repr__方法更偏向精确性,输出内容要尽量能反映如何重新创建这个对象,适合开发者调试。如果没有重写__str__,Python会默认调用__repr__,所以也可以直接使用这个方法:
def __repr__(self): return f"pessoa(Nome='{self._Nome}', Idade='{self._Idade}', CPF='{self._CPF}', Nacionalidade='{self._Nacionalidade}')"
修改后的完整代码示例
把方法整合进你的类里,完整代码如下:
class pessoa: def __init__(self,Nome="",Idade=0,CPF=0,Nacionalidade=""): self._Nome = Nome self._Idade = Idade self._CPF = CPF self._Nacionalidade = Nacionalidade @property def Nome(self): return self._Nome @Nome.setter def Nome(self,Nome): self._Nome = Nome @property def Idade(self): return self._Idade @Idade.setter def Idade(self,Idade): self._Idade = Idade @property def CPF(self): return self._CPF @CPF.setter def CPF(self,CPF): self._CPF = CPF @property def Nacionalidade(self): return self._Nacionalidade @Nacionalidade.setter def Nacionalidade(self,Nacionalidade): self._Nacionalidade = Nacionalidade def comer(self): print("Estou comendo") # 添加__str__方法,自定义打印内容 def __str__(self): return f"Pessoa信息:\n姓名: {self._Nome}\n年龄: {self._Idade}\nCPF: {self._CPF}\n国籍: {self._Nacionalidade}" p = pessoa (input("Nome:"),input("Idade:"),input("CPF:"),input("Nacionalidade:")) print(p)
现在再运行代码,执行print(p)时就能看到对象的属性内容啦!
内容的提问来源于stack exchange,提问作者noob_kill_me
相关产品推荐
相关产品推荐

