如何将此python旧样式类实现为新样式类

时间:2013-09-06 07:07:57

标签: python class

我正在尝试在新的样式类中实现它并且失败。在这个例子中,我想创建具有不同植物和动物种群的森林。

class forest:
    def __init__(self,p,a):
        self.alive="alive" 
        self.pl = []
        self.ani = []
        for i in range(p):
            self.pl.append(self.Plant())
        for i in range(a):
            self.ani.append(self.Animal())
    class Plant:
        def __init__(self):
            self.synth = "co2"
            self.name = "coconut"
    class Animal:
        def __init__(self):
            self.carb="o2"
            self.name="orangutan"

编辑: 正如拉佐洛所要求的那样。 我的问题是我在嵌套和继承之间感到困惑。 所以在我的方法中我试图这样做

class forest(object):
    ....
    ....

    class Plant(forest):

而不是使用类Plant(对象)。我还试图定义应该在Plant类中的林类中的函数。我试图使用/ super / keyword来实现我不应该拥有的东西。然后我在阅读有关创建描述符以完成我想要的事情时迷失了。我认为所有这些尝试都会分散我的注意力。在我读完第一个回复后,它们立即被清除。

谢谢你们两位。 问候, abcd

1 个答案:

答案 0 :(得分:2)

旧式类声明和新式类声明之间的区别在于新式类必须从object(或其他一些新式类)继承。因此,要使您的类成为新式,只需将(object)放在类名后面:

class forest(object):
    # ...

你也是嵌套类,在新的或旧式的类中都不禁止,但这通常是令人困惑和不必要的。只是取消你的PlantAnimal类声明,你应该没事。如果需要,您也可以通过继承object来创建新风格。

请注意,如果您使用的是Python 3,则所有类都是新式类。您不需要显式继承object,因为如果省略它,编译器会为您添加。将它明确化是一个好主意,特别是如果你在不同时间同时使用Python 2和Python 3。