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

Python类属性打印异常:返回对象内存地址而非属性值求助

解决Python对象打印显示内存地址的问题

嘿,我一眼就看出问题出在哪啦!你看到的<__main__.Person object at 0x1055f5d68>是Python默认的对象字符串表示,核心原因是你的Person类没有定义自定义的__str__或__repr__方法,所以当你在Book类里调用str(self.person)时,Python只能输出对象的内存地址,而不是你想要的人员信息。

咱们一步步来解决这个问题:

1. 给Person类添加自定义的字符串表示方法

你需要在Person类里定义__str__方法(或者__repr__,前者面向普通用户的可读输出,后者偏向开发者的调试输出),让Python知道怎么把Person对象转换成有意义的字符串。比如:

class Person:
    def __init__(self, name):
        self.name = name  # 假设Person类有name属性,可替换为你实际使用的属性
    
    # 定义__str__返回人员的可读信息
    def __str__(self):
        return self.name  # 直接返回姓名,也可以写成"借阅人: {self.name}"这种格式

这样当你调用str(person)时,就会返回这个人的姓名,而不是冷冰冰的内存地址了。

2. 修复Book类__str__方法的隐藏bug

看你的Book类__str__代码,还有个小问题:else分支里的result变量没有初始化就直接执行result += str(person),运行时会抛出UnboundLocalError。咱们把它修复得更健壮、更易读:

class Book:
    def __init__(self, title):
        self.title = title
        self.person = None
        self.waitlist = []
    
    def __str__(self):
        if self.person is not None:
            # 用f-string让输出更清晰,带上书名信息
            result = f"《{self.title}》当前借阅人: {str(self.person)}"
        else:
            result = f"《{self.title}》等待列表: "
            # 用join方法高效拼接等待列表的人员,同时处理空列表的情况
            if self.waitlist:
                result += ", ".join(str(p) for p in self.waitlist)
            else:
                result += "无"
        return result
    
    def borrow(self, person):
        if self.person is None:
            self.person = person
            return self.__str__()
        else:
            self.waitlist.append(person)
            return self.__str__()

3. 测试验证效果

现在咱们写个小测试看看效果:

# 创建Person实例
alice = Person("Alice")
bob = Person("Bob")
charlie = Person("Charlie")

# 创建Book实例
python_book = Book("Python从入门到精通")

# 第一次借阅
print(python_book.borrow(alice))
# 输出:《Python从入门到精通》当前借阅人: Alice

# 第二次、第三次借阅,加入等待列表
print(python_book.borrow(bob))
# 输出:《Python从入门到精通》等待列表: Bob
print(python_book.borrow(charlie))
# 输出:《Python从入门到精通》等待列表: Bob, Charlie

这样就能完美解决你遇到的问题啦,再也看不到那些恼人的内存地址了!

内容的提问来源于stack exchange,提问作者Sarina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:25:42