Python多重继承的实现例子及注意事项、self用法

        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)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值