2014-02-27 48 views
0

你好我已经在Python中声明了一个类,然后我想创建一个这个类的对象列表并打印它。我是python的新手,我无法弄清楚我做错了什么。我知道C++,这是我想要做的Python不同类的对象列表

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 

也是我得到以下编译问题,当我尝试运行它:

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

你能帮助我吗?

+1

这里有什么问题:见 -

>>> 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 

您可以通过修改__eq____cmp__改变这种行为?一切看起来不错 – charlee

+0

这不是一个编译问题。这是对象列表的打印输出。 –

+0

@DavidRobinson我不知道它。 Thx的信息! – JmRag

回答

2

您正试图打印方法本身,而不是调用它。

使用以下代替:

for x in li: 
    x.display() 

您也可以提供自定义STR方法;

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 

要回答你的额外的问题是否类型匹配;

How is __eq__ handled in Python and in what order?

+1

我现在看到! Thx为您的时间! – JmRag

+0

完全没问题! – sleepycal

2

您需要解决两个错误:

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

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

Thx现在可以工作。但是这里是我的问题:列表中单词的实例是否有所不同? – JmRag

+0

@JmRag对不起,我不太清楚如何理解你的问题。你的意思是'li = [“123”,“23”,“43”]和'li = WordList(li,True)'? –

+0

@JmRag他们不同,因为一个新的每个'w1 = Word(x,hor)'初始化。例如,您可以确认它们与打印输出中的指针地址不同:“0x7ffc9320aa70”与“0x7ffc9320ab00”。 –