所以我写了一个代码,用于在python 3.5中返回维度(5,3,3,3)的对象列表。现在我的问题是,每当我尝试打印返回的值时,它会打印5个单独的3D列表的地址而不是整个列表。甚至返回值的类型也显示为list
。究竟是什么问题?
这是我的初始化和返回功能。
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)
这是我的过滤器类。
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
答案 0 :(得分:1)
简而言之:而不是这样做:
fil = filters(self.filterDimensions)
self.filters.append(fil)
如果你这样做,你可以达到你想要的效果:
fil = filters(self.filterDimensions)
self.filters += fil.fil
不确定,这取决于那些过滤器应该是什么以及您希望如何将它们放在一起并在结果中。然后,似乎可以完全摆脱filters
类。
实际上,您正在创建filters
类的实例,然后将它们附加到列表中。打印该列表时得到的是OP中预期和看到的对象列表。那些对象ofc并不表示自己是列表,它们都是具有默认字符串表示的通用对象,只显示对象“来自”的类和内存中的地址,以提醒您它确实是一个对象而不是一个类。为了让你的类知道它应该是某种类型的列表并使其表现如此,你可以像这样实现__repr__
方法:
def __repr__(self):
return "<Filters: {}>".format(self.fil)
将它放在filters
课程中,任何print
课程都应该显示其中的列表(或其表示)。仍然可以改进。
BTW:请考虑将您的课程重命名为Filters
左右。上骆驼案是PEP8对班级的建议。
答案 1 :(得分:1)
我想知道如何返回数据成员
您需要访问它们
filters = l.getLayerFilters()
for f in filters:
print(f.dimensions, f.fil)
每当我尝试打印返回的值时,它都会打印地址
你从未告诉Python它应该如何打印你的对象。只是因为那些字段在那里,它不会自动显示它们。
在尝试与评论中讨论时,您需要使用一个新函数覆盖该输出行为,该函数返回您的类的单个人类可读的 repr 表示
作为一个例子
class filters(object):
def __init__(self, dimensions):
self.dimensions = dimensions
self.fil = np.random.random_sample(self.dimensions)
def __repr__(self):
return "dimensions: {}\nfil: {}".format(self.dimensions, self.fil)
现在,再试一次
更多阅读