Python中返回对象列表打印出地址而非值的问题排查
问题解析:打印过滤器列表显示对象地址而非内容
你遇到的问题其实很常见——当你打印filters对象的列表时,Python默认输出的是每个对象的内存地址和类标识,而不是你期望的数组内容,核心原因在于你的filters类没有定义自定义的字符串表示方法。
问题根源
Python中,当你直接打印一个自定义类的实例时,如果没有专门定义__repr__()或__str__()方法,解释器会默认输出这个对象的类名和它在内存中的地址(就是你看到的<__main__.filters at 0xb195a90>这种格式)。你的filters类里虽然有存储数组的self.fil属性,但Python不知道要怎么把这个对象转换成可读的字符串,所以只能用默认的方式展示。
解决方案
给你的filters类添加一个__repr__()方法(或者__str__(),前者更偏向“官方”的可重现表示,后者偏向友好的用户展示),让Python知道打印这个对象时应该输出self.fil的内容。
修改后的filters类代码如下:
import numpy as np class filters(object): def __init__(self, dimensions): self.dimensions = dimensions self.fil = np.random.random_sample(self.dimensions) def __repr__(self): # 既显示维度又显示数组内容,输出更清晰 return f"filters(dimensions={self.dimensions}, fil={self.fil!r})" # 如果只需要显示数组内容,直接用下面这行即可 # return repr(self.fil)
这样当你再调用l.getLayerFilters()并打印时,就会看到每个filters对象对应的3D数组内容,而不是内存地址了。
你的原始代码片段
初始化与返回函数
class layer(object): def __init__(self, inputDimensions, channels, padding, stride, layerInput): self.inputDimensions = inputDimensions self.channels = channels self.padding = padding self.stride = stride self.layerInput = layerInput def getLayerInfo(self): return self.inputDimensions, self.channels, self.padding, self.stride def getLayerInput(self): return self.layerInput def getLayerFilterInfo(self): return self.filterDimensions, self.numberOfFilters def getLayerFilters(self): return self.filters def initializeFilter(self, filterDimensions, numberOfFilters): self.filterDimensions = filterDimensions self.numberOfFilters = numberOfFilters self.filters = [] for i in range(0, self.numberOfFilters): fil = filters(self.filterDimensions) self.filters.append(fil)
原始filter类
class filters(object): def __init__(self, dimensions): self.dimensions = dimensions self.fil = np.random.random_sample(self.dimensions)
输入输出示例
In [11]: l.getLayerFilters() Out[11]: [<__main__.filters at 0xb195a90>, <__main__.filters at 0xb1cb588>, <__main__.filters at 0xb1cb320>, <__main__.filters at 0xb1cb5c0>, <__main__.filters at 0xb1cbba8>] In [12]: type(l.getLayerFilters()) Out[12]: list
内容的提问来源于stack exchange,提问作者DuttaA
相关产品推荐
相关产品推荐

