You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:46:56