我是一个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吗?
答案 0 :(得分:7)
除非您明确转换为str
,否则它是用于呈现对象的__repr__
method。
有关详细信息,请参阅Difference between __str__
and __repr__
in Python。
答案 1 :(得分:2)
你做了这个对象:
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)]
答案 2 :(得分:1)
你可以这样做:
print(map(str,young_fellas))
答案 3 :(得分:0)
尝试覆盖 repr
def __repr__(self):
return self.name + "(" + str(self.age) + ")"
编辑:更好的方式,感谢保罗。
def __repr__(self):
return "%s(%d)" % (self.name, self.age)