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)

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐