Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing a list of objects

Tags:

python

I am a Python newbie. I have this small problem. I want to print a list of objects but all it prints is some weird internal representation of object. I have even defined __str__ method but still I am getting this weird output. What am I missing here?

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)

Please note that I know I can use either a for loop or a map function here. I am looking for something shorter and more idiomatic. Thanks.

EDIT:

One more question: Is the above code of mine Pythonic?

like image 260
one-zero-zero-one Avatar asked Jul 17 '10 15:07

one-zero-zero-one


2 Answers

Unless you're explicitly converting to a str, it's the __repr__ method that's used to render your objects.

See Difference between __str__ and __repr__ in Python for more details.

like image 51
Blair Conrad Avatar answered Sep 23 '22 12:09

Blair Conrad


Your made this object:

person("Cheryl", 20)

This means repr should be same after creation:

def __repr__(self):
 return 'person(%r,%r)' % (self.name,self.age)

Output becomes:

[person('Shemoor',14), person('Sakharam',8)]
[person('Cheryl',20), person('Kimbala',25)]
like image 28
Tony Veijalainen Avatar answered Sep 22 '22 12:09

Tony Veijalainen