2014-11-21 53 views
-1

我有一個方法類。現在,我把這個類放在一個列表中。 當我試圖打印的方法,我做的:列表中的對象

print(listname[pointer].method) 

但是,當我編譯它說,對象不支持指數化。

確切的代碼是這樣的:

class hero(): 
    def __init__(self, heroname): 
     self.h=heroname 

herolist=[] 
herolist.append(hero) 

print(herolist[0].h) 

我期待的是,代碼將打印主人公的名字,但事實並非如此。我究竟做錯了什麼?

編輯:

對不起,我忘了,以顯示它的代碼,但課堂上,我做了實例我試圖調用對象之外。確切的說,我不喜歡的東西:

heroone=hero() 
heroone.h='jude' 
+1

你的代碼中有幾個問題,但它不給你說的錯誤(「不支持索引」)。 – BrenBarn 2014-11-21 07:26:28

回答

2

你有幾個問題。首先,初始化方法的名稱是__init__兩個下劃線在每邊),而不是___init___。其次,通過附加hero您正在追加課程本身。該類本身沒有h屬性。只有它的實例才具有h屬性,因爲__init__僅在創建實例時調用。第三,您在__init__方法中忘記了self參數。第四,你顯然寫了__init__期待一個「heroname」的論點,但你沒有通過任何這樣的論點。 (你不傳遞任何參數,因爲你從來沒有實例化的類。)

試試這個:

class hero(): 
    def __init__(self, heroname): 
     self.h = heroname 

herolist=[] 
herolist.append(hero('Bob the Hero')) 

print(herolist[0].h) 
0

您正在使用三個_init的方法,因爲它的構造不叫。 兩個init需要兩個_。 要將名稱分配給h,請將其傳遞給init方法。 使用CamelCase來namethe類

下面是工作代碼:

class Hero(): 
    def __init__(self, heroname): 
     self.h = heroname 

herolist=[] 

herolist.append(Hero('Dude')) 

print(herolist[0].h) 
0

您存儲類定義,而不是一個實例化的客體,這意味着heroname沒有一個值。你可以寫:

herolist.append(hero('Achile')) 

和你的例子將按預期工作。

0

這樣做: -

class Hero(): 
    def __init__(self, heroname): 
     self.h=heroname 

herolist=[] 

現在你可以這樣做:

h1 = Hero('jude') 
herolist.append(h1) 
print herolist[0].h 

或更簡單:

herolist.append(Hero('Hero')) 
print herolist[0].h