我想了解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)可以完美地工作
在Python2中,
super
不能处理不从object
继承(直接或间接)的对象对于旧式类,允许多重继承,但由于菱形问题,可能会出现意外行为(请参见第2.3here)
出于这些原因(以及许多其他原因),建议始终从Python 2中的
object
继承相关问题 更多 >
编程相关推荐