如何从Python类中返回列表?当前仅返回对象内存地址
解决思路
你遇到的问题和__iter__没关系——__iter__只是让实例能被迭代(比如用for循环遍历),但打印对象时默认调用的是__str__或__repr__方法,你的ListNode类没重写这两个方法,所以print会输出默认的对象内存地址。
下面是几种可行的解决方法:
方法1:重写__str__或__repr__方法
直接在ListNode类里添加这两个方法的任意一个,让print时返回列表的字符串形式:
class ListNode: # 先修复可变默认参数的坑:不要用[]作为默认值,改用None def __init__(self, val=None): self.val = val if val is not None else [] def __iter__(self): return iter(self.val) # 用于友好的用户输出 def __str__(self): return str(self.val) # 可选:用于开发者视角的精准表示(比如在终端直接输入实例时显示) def __repr__(self): return f"ListNode({self.val})"
修改后再运行print(list_instances()),就会直接输出你想要的列表内容。
方法2:直接访问实例的val属性
如果不想修改ListNode类,也可以在打印时直接输出实例的val属性:
if __name__=="__main__": print(list_instances().val)
额外提醒:修复可变默认参数的问题
你的ListNode.__init__用了val=[]作为默认参数,这是Python的常见坑——多次实例化ListNode且不传入val时,所有实例会共享同一个列表。上面的方法1已经修复了这个问题,建议你始终避免用可变对象(列表、字典等)作为函数/方法的默认参数。
内容的提问来源于stack exchange,提问作者stang-Spitfire1975
相关产品推荐
相关产品推荐

