在Python2.7中使用Super(子类,self)的多重继承

2024-05-29 00:04:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想了解Python2.7中是否允许从父对象不是对象的类进行多重继承

Ref:TypeError in Python single inheritance with "super" attribute确实提供了一些示例,但我希望以不同的方式使用super(Subclass,self),如下所示

动物-->;哺乳动物-->;坎诺利;不会游泳-->;狗

所以Dog类继承自CannotFly和CannotSwim类。CannotFly和CannotSwim类中的每一个都继承自哺乳动物,而哺乳动物继承自动物类

    class Animal:
    def __init__(self, animalName):
        print(animalName, 'is an animal.');


# Mammal inherits Animal
class Mammal(Animal):
    def __init__(self, mammalName):
        print(mammalName, 'is a mammal.')
        super(Mammal,self).__init__(mammalName)


# CannotFly inherits Mammal
class CannotFly(Mammal):
    def __init__(self, mammalThatCantFly):
        print(mammalThatCantFly, "cannot fly.")
        super(CannotFly,self).__init__(mammalThatCantFly)


# CannotSwim inherits Mammal
class CannotSwim(Mammal):
    def __init__(self, mammalThatCantSwim):
        print(mammalThatCantSwim, "cannot swim.")
        super(CannotSwim,self).__init__(mammalThatCantSwim)


# Dog inherits CannotSwim and CannotFly
class Dog(CannotSwim, CannotFly):
    def __init__(self,arg):
        print("I am a barking dog")
        super(Dog, self).__init__(arg)



# Driver code
Dog1 = Dog('Bark')

当我运行它时,我得到错误“TypeError:必须是type,而不是classobj”,这是因为CanotSwim();CannotFly()类派生自Madama,Madama不是基类,而是继承自Animal类。如果不是这样的话,那么Super(子类,self)可以完美地工作


Tags: gtselfinitdefclassprintsuperdog
1条回答
网友
1楼 · 发布于 2024-05-29 00:04:40

在Python2中,super不能处理不从object继承(直接或间接)的对象

对于旧式类,允许多重继承,但由于菱形问题,可能会出现意外行为(请参见第2.3here

出于这些原因(以及许多其他原因),建议始终从Python 2中的object继承

相关问题 更多 >

    热门问题