python 继承

继承

在python中

一个类可以被多个类继承

一个类也可以继承多个父类

继承的目的:

当一个类的一些属性与另一个类中的属性重合,而如果有很多类出现这样的情况,

就会造成大量的重复代码,为了解决这类问题就用到了继承

继承的是子类,被继承的父类

继承的本质是:将一些类中共有的属性挑出来放进一个父类中,所有的子类从这个父类中继承属性

class Dog:
    def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别
        self.name = name
        self.master = master
        self.sex = sex

class Husky(Dog):  #在这里写上Husky类继承Dog类
    pass           #这里面布放东西
gou = Husky('二哈','二狗子','') #在这里实例化一个狗
print(gou.name)    #依然可以打印出它的名字,主人,性别
print(gou.master)
print(gou.sex)

二哈
二狗子

这个就是继承,因为继承一个类,也叫单继承

子类甚至还能调用父类的方法

class Dog:
    def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别
        self.name = name
        self.master = master
        self.sex = sex
    def attack(self):
        print('%s咬人啦'%(self.name))
class Husky(Dog):  #在这里写上Husky类继承Dog类
    pass           #这里面布放东西
gou = Husky('二哈','二狗子','') #在这里实例化一个狗
gou.attack()

二哈咬人啦

class Dog:
    def __init__(self,name,master,sex): #比如每只狗都有名字,主人,性别
        self.name = name
        self.master = master
        self.sex = sex
    def attack(self):
        print('%s咬人啦'%(self.name))
class Husky(Dog):  #在这里写上Husky类继承Dog类
    def attack(self):
        print('%s没有咬到人'%(self.name))
gou = Husky('二哈','二狗子','') #在这里实例化一个狗
gou.attack()

二哈没有咬到人

但是,如果子类中有的方法,就会先用自己的,如果自己没有才会带父类中去找,如果没有找到就会报错

派生

class Dog:
    def __init__(self,name,master,sex):
        self.name = name
        self.master = master
        self.sex = sex

class Husky(Dog):
    def __init__(self, name, master, sex,kind): #将自己的属性写在这里
        Dog.__init__(self, name, master, sex)   #将父类的属性写在这里
        self.kind = kind                        #这里只用将自己多的写出来就行了
    def attack(self):
        print('%s没有咬到人'%(self.name))
gou = Husky('二哈','二狗子','','哈士奇')
gou.attack()    #这种父类中没有方法叫派生方法
print(gou.kind) #这种父类中没有的属性叫派生属性

二哈没有咬到人
哈士奇

多继承

顾名思义,继承多个类,就是多继承

class Dog1:
    def __init__(self,name,sex,master,kind): #这个类里写姓名性别主人和品种
        self.name = name
        self.sex = sex
        self.master = master
        self.kind = kind
class Dog2:
    def __init__(self):   #这里什么都不写
        pass
    def attack(self):      #在这里写个方法
        print('哈士奇又要咬人了')
class Husky(Dog1,Dog2): #这里写Husky类继承了Dog1和Dog2
    pass
gou = Husky('二哈','','二狗子','哈士奇') #实例化一个gou对象
print(gou.name)   #打印gou的名字
gou.attack()      #同时这个对象又调用Dog2中的方法

二哈
哈士奇又要咬人了

总结一下:

父类中没有的属性 在子类中出现 叫做派生属性

父类中没有的方法 在子类中出现 叫做派生方法

只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类也没有报错

如果父类 子类都有 用子类的

  如果还想用父类的,单独调用父类的:

    父类名.方法名 需要自己传self参数

    super().方法名 不需要自己传self

正常的代码中 单继承 === 减少了代码的重复

继承表达的是一种 子类是父类的关系

原文地址:https://www.cnblogs.com/GrandDarkness/p/8318636.html