JmRag
JmRag

Reputation: 1459

Python List of different class' objects

Hello I have declared a class in Python and then I want to make a list of objects of this class and print it. I am new to python and I cannot figure out what I am doing wrong. I know C++ and this is what I would like to do

class Word:

    def __init__(self,word,hor):
        self.word=word
        self.x1=0
        self.y1=0
        self.x2=0
        self.y2=0
        self.hor=hor

    def get_dimensions(self):
        return(self.x1,self.y1,self.x2,self.y2)

    def set_dimensions(self,t):
        self.x1=t[0]
        self.y1=t[1]
        self.x2=t[2]
        self.y2=t[3]

    def get_horizontal():
        return self.hor

    def display(self):
        print word

def WordList(word_list,hor):
    l=[]
    for x in word_list:
        w1=Word(x,hor)
        l.append(w1)
    return l


li=["123","23","43"]
li=WordList(li,True)
for x in li:
    x.display #obviously something else has to be done here

Also I get the following compilation problem when I try to run it:

[<__main__.Word instance at 0x7ffc9320aa70>, <__main__.Word instance at 0x7ffc9320ab00>, <__main__.Word instance at 0x7ffc9320ab48>]

Can you help me?

Upvotes: 0

Views: 2232

Answers (2)

SleepyCal
SleepyCal

Reputation: 5993

You are attempting to print the method itself, rather than call it.

Use the following instead:

for x in li:
    x.display()

You can also provide a custom str method;

class SomeClassHere(object):
    def __init__(self, a):
        self.a = a
    def __str__(self):
        return "Hello %s" % ( self.a, )

>>> a = SomeClassHere(a="world")
>>> print a
Hello world

To answer your additional question on whether the types match or not;

>>> class Hello(object):
...     def __init__(self, a):
...         self.a = a
... 
>>> b = Hello(a=1)
>>> c = Hello(a=2)
>>> d = Hello(a=3)
>>> b == c
False
>>> c == d
False
>>> isinstance(b, Hello)
True

You can change this behaviour by modifying __eq__ and __cmp__ - see:

How is __eq__ handled in Python and in what order?

Upvotes: 2

Uli K&#246;hler
Uli K&#246;hler

Reputation: 13750

You need to fix two bugs:

def display(self):
    print self.word #Added self here

and

for x in li:
    x.display() #Added brackets here

Upvotes: 2

Related Questions