2014-02-27 45 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」。 –