Python中打印Person类对象未显示属性问题求助
嘿,这个问题我刚入门Python的时候也踩过坑!让我给你掰扯清楚为啥会这样,以及怎么解决~
为什么打印对象会输出内存地址?
当你用print()打印一个Python对象时,实际上Python会调用这个对象的__str__()方法(如果没有定义__str__,就会 fallback 到__repr__()方法)。而你定义的Person类继承自默认的object类,object类的__str__/__repr__方法默认就是输出对象的类名和它在内存中的地址,所以你看到的就是<__main__.Person object at 0x101fe9438>这种内容。
怎么让打印对象时显示name和age?
你只需要在Person类里自定义__str__或者__repr__方法就行,这两个方法的区别是:
__str__是给用户看的,输出更友好的字符串__repr__是给开发者看的,输出的字符串应该尽量能还原这个对象(比如可以通过eval()重新创建对象)
下面给你两种实现方式:
方式1:重写__str__方法
class Person(): def __init__(self, name, age): self.name = name self.age = age def greet(self): print('Hello', self.name) def __str__(self): return f"Person(name='{self.name}', age={self.age})"
现在你创建对象并打印:
p = Person("Alice", 25) print(p) # 输出:Person(name='Alice', age=25)
方式2:重写__repr__方法
如果同时定义了__str__和__repr__,print()会优先用__str__;如果只定义__repr__,那print()和直接在控制台输入对象名都会用它:
class Person(): def __init__(self, name, age): self.name = name self.age = age def greet(self): print('Hello', self.name) def __repr__(self): return f"Person(name='{self.name}', age={self.age})"
测试一下:
p = Person("Bob", 30) print(p) # 输出:Person(name='Bob', age=30) p # 在控制台直接输入p,也会输出同样内容
简单来说,就是Python默认的对象字符串表示不够友好,你需要自己定义想要的输出格式~
内容的提问来源于stack exchange,提问作者sajordnn
相关产品推荐
相关产品推荐

