我是个Python新手。我有个小问题。我想打印一个对象列表,但是它只打印一些奇怪的对象内部表示。我甚至定义了__str__
方法,但仍然得到了这个奇怪的输出。我在这里错过了什么?
class person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return self.name + "(" + str(self.age) + ")"
def partition(coll, pred):
left = []
right = []
for c in coll:
if pred(c):
left.append(c)
else:
right.append(c)
return left, right
people = [
person("Cheryl", 20),
person("Shemoor", 14 ),
person("Kimbala", 25),
person("Sakharam", 8)
]
young_fellas, old_fellas = partition(people, lambda p : p.age < 18)
print(young_fellas)
print(old_fellas)
请注意,我知道我可以在这里使用for
循环或map
函数。我在找一些更短更地道的东西。谢谢。
编辑:
还有一个问题:我上面的代码是Pythonic的吗?
发布于 2010-07-17 07:31:33
除非显式转换为str
,否则用于呈现对象的是__repr__
method。
有关更多详细信息,请参阅Difference between __str__
and __repr__
in Python。
发布于 2010-07-17 09:20:08
你的目标是:
person("Cheryl", 20)
这意味着,在创建之后,repr应该是相同的:
def __repr__(self):
return 'person(%r,%r)' % (self.name,self.age)
产出变成:
[person('Shemoor',14), person('Sakharam',8)]
[person('Cheryl',20), person('Kimbala',25)]
发布于 2010-07-17 07:33:42
你可以这样做:
print(map(str,young_fellas))
https://stackoverflow.com/questions/3272097
复制