【问题标题】:How do I implement this python old style class as a new style class [closed]如何将此python旧样式类实现为新样式类[关闭]
【发布时间】:2013-09-06 07:07:57
【问题描述】:

我正在尝试在新样式类中实现这一点,但失败了。在此示例中,我想创建具有不同植物和动物种群的森林。

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(object)。我还试图在 Plant 类中定义应该在 Forest 类中的函数。我试图使用 /super/ 关键字来实现我不应该拥有的东西。然后我迷失在阅读有关创建描述符来做我想做的事情的过程中。我认为所有这些尝试都会分散我对问题的注意力。在我阅读第一个回复后,它们立即被清除。

感谢你们俩。 问候, abcd

【问题讨论】:

  • 你认为你到底在哪里失败了?例如,我在您的代码中看不到任何新的类继承...
  • 这是旧样式代码的示例,我想将其转换为新样式..
  • 啊,所以你自己没有尝试任何东西......
  • 不,我尝试了许多不同的方法。我感到完全迷失了,因为我遇到了范围问题。我有一个固定的想法,我的解决方案必须是嵌套的,这是我问题的根源。
  • 请在下次说明您尝试了什么,出了什么问题等...

标签: python class


【解决方案1】:

旧式类声明和新式类的区别在于新式类必须继承自object(或其他一些新式类)。因此,要使您的课程具有新风格,只需在课程名称后加上(object)

class forest(object):
    # ...

您还嵌套了类,这在新式或旧式类中都没有被禁止,但这通常是令人困惑和不必要的。只需取消缩进您的 PlantAnimal 类声明,就可以了。如果您愿意,您也可以通过继承 object 来使它们成为新样式。

请注意,如果您使用的是 Python 3,则所有类都是新型类。您不需要显式地从object 继承,因为如果您省略它,编译器会为您添加它。明确说明通常是个好主意,尤其是当您在不同时间同时使用 Python 2 和 Python 3 时。

【讨论】:

  • 啊,谢谢。出于某种原因,我希望它们嵌套。我想这不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 2023-03-10
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多