2013-02-12 132 views
0

我不知道如何完成應該很簡單的事情。在python中的類之間共享屬性

我想定義一個類。在那個類中將是子類。在那些子類中將是屬性。

好吧,那很簡單。但我希望根據另一個子類的屬性來生成一個子類的屬性。這是我的(錯誤的)代碼試圖做到這一點:

class Food(object): 
    class Fruits(object): 
     crunchy=['Apples', 'Pears'] 
     juicy=['Limes', 'Lemons'] 

    class Salads(object): 
     import Fruits 
     FruitSalad=crunchy+juicy+['Whipped Cream'] 

顯然「導入水果」在這裏是錯誤的。但是我怎麼能夠完成我所需要的?

------------- edit/addendum ------------------------------ --------

好吧,所以我失去了「食物」的外部類,沒關係,我從來不喜歡它。

我現在可以實例一流進入第二是這樣的:

class Fruits(object): 
    crunchy=['Apples', 'Pears'] 
    juicy=['Limes', 'Lemons'] 

class Salads(object): 
    fruit=Fruits 
    FruitSalad=fruit.crunchy+fruit.juicy+['Whipped Cream'] 

更接近,但我真的不想失去的「果」。結構體。

+0

你爲什麼要嵌套類?你想達到什麼目的? – 2013-02-12 15:59:10

+0

我希望能夠在其他地方實例化「Food.Salads」。 – 2013-02-12 16:00:25

+1

你根本不需要使用'import fruits' * *。只能使用'import'從其他文件導入結構。這些定義位於同一個文件中。 – 2013-02-12 16:00:26

回答

1

因爲你將它定義爲一個嵌套的類集,所以你會不必要地使事情複雜化。現在的解釋是涉及「班級套件」這樣的詞,爲什麼你需要在一個地方需要Fruits.crunchy,在另一個地方需要Food.Fruits.crunchy。你也試圖連接列表和字符串,這是行不通的。

只要保持簡單,創​​建一個名爲food的模塊,然後您可以執行import food並創建一個food.Salads()的實例。

2

也許對subclassesencapsulation有一些混淆。這是一個示例層次結構,如果你正在尋找繼承。請注意,這個特定的代碼沒有充分利用層次結構,只是一些裸列表會更容易一些,變量都是類變量,而不是每個實例。

class Food(object): 
    pass 

class Fruit(Food): 
    pass 

class Salad(Food): 
    pass 

class CrunchyFruit(Fruit): 
    ingredients = ['apples','pears'] 

class JuicyFruit(Fruit): 
    ingredients = ['limes','lemons'] 

class FruitSalad(Salad): 
    ingredients = JuicyFruit.ingredients + CrunchyFruit.ingredients + ['whipped cream'] 

print(FruitSalad.ingredients)