从对象派生

时间:2017-05-26 01:05:57

标签: python inheritance

我想知道是否有可能从实例化对象而不是类继承。如果是的话,我哪里出错?

我有这个简单的代码。

class Fruit:
    def printFruit(self):
         printFruit("Fruit Class")

myFruitObj = Fruit()

class Apple(myFruitObj):
    def printApple("Apple Class")

myApple = Apple()

myApple.printFruit()
myApple.printApple()

Apple 继承自 myFruitObj 。 我收到错误:

  

TypeError:object()不带参数

如果我添加__init__构造函数,我会得到:

  

__init__()需要1个位置参数,但是给出了4个。

2 个答案:

答案 0 :(得分:0)

您不能从类实例继承。这是不可能的。对象和类是两个不同的东西。

Python调用类的__new__()方法时,会创建一个对象。 __new__()返回该特定对象的新实例。然后,通过__init__()方法初始化该实例。可以创建相同类的多个实例。

但是,类只在导入时创建一次。 Python评估class语句,并创建一个新的对象。当一个类对象继承自另一个类对象时,子类将接收父类的所有属性和方法对象。

以这种方式思考:类是蓝图,对象是蓝图的 thing 创建。当您创建该东西时,您的设计将遵循蓝图的规范。

现在说你想以某种方式修改原始蓝图的布局,但你仍然希望保留旧的蓝图。您是否会根据原始蓝图中创建的基础创建新蓝图?不,当然不。您的设计将基于蓝图本身,而不是由他们创建的。

课程也一样。当您创建类的新对象时,对象的基本结构由类创建 - 蓝图。但是,就像上面的示例一样,当您想要从类继承某些东西时,您不会尝试从类继承对象创建为什么的?因为您希望继承类的一般结构 - 蓝图 - 而不是其中一个类实例的特定结构和特定属性。

答案 1 :(得分:0)

myFruitObj.__class__

这可以胜任。

class Fruit:
    def printFruit(self):
         printFruit("Fruit Class")

myFruitObj = Fruit()

class Apple(myFruitObj.__class__):
    def printApple("Apple Class")

myApple = Apple()

myApple.printFruit()
myApple.printApple()
相关问题