2016-07-04 39 views
0

當我創建我的課程的第一個實例時,它運行完美。但是當我嘗試創建第二個實例時,我得到一個TypeError:'str'對象不可調用。爲什麼我不能創建我的課程的多個實例?

class Settlement: 

    def __init__(self): 
     self.name() 
    . 
    . 
    . 
    First_Name = [list items here] 
    Second_Name = [list items here] 
    . 
    . 
    . 
    def name(self): 
     first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
     second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
     Settlement.name = "Name: "+ first+second 


MySettlement = Settlement() 
MySettlement2 = Settlement() 
+4

你能1)修正你的縮進,2)顯示你實際創建你的班級實例的位置?還要注意 - 你沒有使用任何實例級別的屬性,所以實例將共享類級別的反正... –

+1

這是一個旁白,但你應該在這裏使用'random.choice'而不是'random.int' –

+0

我解決1和2,但我不知道我明白最後一部分,這聽起來像它可能是我的問題的原因,雖然... –

回答

1

更新1:問題是您正在使用名稱作爲函數和類變量。將Settlement.name更改爲其他內容並且它可以工作。

import random 
class Settlement: 

    def __init__(self): 
     self.name() 

    First_Name = ['Romaan', 'test'] 
    Second_Name = ['Shmrd', 'test'] 

    def name(self): 
     first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
     second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
     Settlement.nameeee = "Name: "+ first+second 


MySettlement = Settlement() 
MySettlement2 = Settlement() 

更新2: 只是爲了確保你避免使用相同的名稱,函數名這樣的錯誤,你可以聲明在初始化功能上的頂部和/或實例變量,所有的類

1

在:

def name(self): 
    first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
    second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
    Settlement.name = "Name: "+ first+second 

你有一個方法叫name - 當你打電話的名字 - 它Settlement.name = ...完成 - 這有效地重新綁定Settlement.name是一個字符串(例如:它不再是你的name方法並可調用),因此你收到的錯誤。

您需要爲屬性和方法使用單獨的名稱。我可能會叫namecreate_name ...

的另一個問題是,您要使用self.name =,而不是Settlement.name =否則你重新使用在所有情況下相同的名稱。

相關問題