2016-06-28 53 views
0

我試圖讓它能夠運行一個函數,該函數將用代碼中包含的幾個實例填充類。在代碼中預填充實例(Python)

class Pets(object): 

    def __init__(self, name, scientific_name, feet_number, type) 
    super(Pets,self).__init__() 
    self.name = name 
    self.scientific_name = scientific_name 
    self.feet_number = feet_number 
    self.type = type 

這是我卡住的地方。 我想創建一個包含實例列表(例如狗,貓,馬...)的函數,以便在函數運行時立即訪問這些實例。

我從Creating dynamically named variables from user input(Second Paragraph,First Sentence)這樣的地方知道我所要求的是可能的,我只是不知道它的語法。

+0

你爲什麼叫'super(Pets,self)'?你打算運行什麼構造函數? – nbryans

+0

這是一個非常令人困惑的問題。您可以從一個函數運行代碼,如'my_instance = Pets('bob',robert,2,my_type)',它將創建一個具有這些值的實例。你的意思是別的嗎? –

+0

我剛剛被教導使用總是在類中使用超級,以防我需要稍後創建繼承。 –

回答

0

這是你想要做的嗎?

class Pet(object): 
    def __init__(self, details): 
    self.name = details[0] 
    self.scientific_name = details[1] 
    self.feet_number = details[2] 
    self.type = details[3] 

if __name__ == '__main__': 
    pet_list = [('Cat', 'Kitty Cat', 4, 'Cuddly'), ('Dog', 'Puppy Wuppy', 3, 'Licky')] 
    pets = [Pet(item) for item in pet_list] 

它給你:

pets 
> [<__main__.Pet at 0x8134d30>, <__main__.Pet at 0x8134d68>] 

pets[0] 
> <__main__.Pet at 0x8134d30> 

pets[0].name 
> 'Cat' 

pets[0].scientific_name 
> 'Kitty Cat' 

pets[1].name 
> 'Dog' 

有很多的方式,這可能取決於你想做的事放在一起。例如,您可以創建一個稱爲Pet()的主類,其中包含對所有寵物都爲真的一些基本屬性和方法,然後爲每個繼承基類的寵物創建特定的類,例如, class Cat(Pet):

或者您可以讓Pet類知道所有其他細節,具體取決於傳入的name,然後相應地填充實例變量。

+0

謝謝你的回答,這正是我正在尋找的,我只需要改變我想稍微構建我的代碼的方式。再次謝謝你。 –