我想知道是否有可能从实例化对象而不是类继承。如果是的话,我哪里出错?
我有这个简单的代码。
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个。
答案 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()