在python中的类之间共享属性

时间:2013-02-12 15:58:24

标签: python object inheritance

我不确定如何完成一些应该直截了当的事情。

我想定义一个类。在那个类中将是子类。在那些子类中将是属性。

好的,这很容易。但我希望根据另一个子类的属性生成一个子类的属性。这是我的(错误)代码尝试这样做:

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

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

显然,“进口水果”在这里是错误的。但是我怎样才能完成我的需要呢?

-------------编辑/补遗------------------------------- -------

好的,所以我失去了外类“食物”,没关系,我从来都不喜欢它。

我现在可以将第一个类实例化为第二个类,如下所示:

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

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

哪个更接近,但我真的想失去“水果”。结构

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

因为你将它定义为一组嵌套的类,所以你不必要地使事情复杂化。现在的解释涉及“类套件”之类的单词,以及为什么你需要在一个地方Fruits.crunchy而在另一个地方需要Food.Fruits.crunchy。您还尝试连接列表和字符串,这将无法正常工作。

简单地说,创建一个名为food的模块,然后您可以import food创建一个food.Salads()的实例。