打印对象列表

时间:2010-07-17 15:29:18

标签: python

我是一个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吗?

4 个答案:

答案 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)