Python中使用多重继承,一个类继承多个父类时,需要注意的地方有:1.重写父类方法时报错 2.创建子类时参数出错 3.向父类传递参数时出错。接下来通过实现一个例子来一一列举这三个问题。
一.参数中self的用法
class Animal(object):
def __init__(self,name,age):#类中自己的init方法第一个参数一定是self,代表这个类的实例,传递参数时不需要管self
self.name=name
self.age=age
类中创建的init方法中,第一个参数self,表示Animal类的实例,比如我创建了两个实例,st1和st2,通过st1和st2分别调用Animal中的init方法,那么st1调用的self代表st1,st2调用的st2代表st2,通过运行下面这段代码,从输出结果可以,看出他们的地址不一样
class Animal(object):
def prt(self):
print(self)
sd = Animal()
sd.prt()
sd2 = Animal()
sd2.prt()
输出结果:
<__main__.Animal object at 0x000001B4CB1B17F0>
<__main__.Animal object at 0x000001B4CB1B1790>
二、多重继承的例子
class Animal(object):
def __init__(self,name,age):#类中自己的init方法第一个参数一定是self,代表类的实例,传递参数时不需要管self
self.name=name
self.age=age
class Dog(Animal):
def __init__(self,name,age,typ):
# super.__init__(name,age)#单个父类继承时,要是super()
super().__init__(name,age)
self.typ=typ
#class Smalldog(Animal,Dog):#参数中父类的顺序问题,一级一级按顺序写
class Smalldog(Dog,Animal):
def __init__(self,name,age,typ,eat):
# super().__init__(name,age,typ)#不能直接使用super()给父类传递参数,因为有两个父类
# Animal.__init__(name,age)#在进行父类传递参数的时候,
# Dog.__init__(name,age,typ)
Animal.__init__(self,name,age)
Dog.__init__(self,name,age,typ)
self.eat=eat
def pt(self):
print(self.eat)
sd = Smalldog('小旺',4,'柴犬','奶粉')
sd.pt()
三、注意事项
1.重写父类方法时报错
重写时注意是super().而不是super.
# super.__init__(name,age)#单个父类继承时,要是super() super().__init__(name,age)
2.创建子类时参数出错
创建时参数顺序为从左到右依次寻根,根类在右
#class Smalldog(Animal,Dog):#参数中父类的顺序问题,一级一级按顺序写 class Smalldog(Dog,Animal):
3.向父类传递参数时出错
如上面代码部分,传递参数时,注意指明是哪一个父类,并且第一个参数要为self,类的方法内部调用其他方法时,需要用到 self 来代表实例,在Smalldog类内部调用父类Animal的方法,第一个参数为self,代表Smalldog的实例对象是哪一个,这样父类Animal才能知道自己被哪一个对象实例化了
# Animal.__init__(name,age)#在进行父类传递参数的时候, # Dog.__init__(name,age,typ) Animal.__init__(self,name,age) Dog.__init__(self,name,age,typ)