Reputation: 1459
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
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
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