python的继承

104 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

大家好,我是木大木大,因为疫情和环境原因啊,在家开始了自学python的路子,从此深坑加一人。后面我会每天持续更新一些学习python的过程,当然一开始就是一些基础啦,希望大家多多支持,莫嫌弃啦~

继承

继承:生活中,儿子继承父亲的财产(我要回去继承皇位了),在python中是在多个类中一个所属关系,被继承的类称为父类 , 接收继承的类称为子类;在继承中子类是默认继承父类中的属性与方法。

继承可以解决类与类之间代码的冗余

在python中所有类都有一个父类就是object , object就是基类,超类

在python3中都是默认继承了object类

1.1 单继承

一个子类继承一个父类

父类中的隐藏属性或者方法 , 子类是无法继承的

class Father:

    def __init__(self):
        self.name = '雍正'
        self.clothes = '龙袍'

    def eat(self):
        print('吃满汉全席')
        

class Son(Father):
    pass

ql = Son()
print(ql.clothes)
ql.eat()

1.2 重写父类中的属性与方法

在子类中如果重新定义了init初始化方法的化 , 实例化对象会默认访问自身的属性不会访问父类中的实例属性;

class Father:

    def __init__(self , name ):
        self.name = name
        self.__clothes = '龙袍'

    def eat(self):
        print('吃满汉全席')


class Son(Father):

    def __init__(self,age , name):
        self.age = age
        # 指名道姓 , 类名.方法名(self)
        # Father.__init__(self , name)

        # 使用super
        # 在super中会自动的定位与绑定对象
        super(Son , self).__init__(name)
        super().__init__(name)

    def run(self):
        print('游山玩水')

        # Father.eat(self)
        super().eat()


ql = Son(86 ,'乾隆')
# ql.eat()
ql.run()
# print(ql.age)
# print(ql.name)

1.3 属性查找

对象在寻找属性的时候,——> 自身属性查找 ——>所在的类中查找 ——> 父类中

对象在寻找方法 ——>所在的类中查找 ——> 父类中

1.4 多层继承

多层继承即子类继承父类 , 父类继承对应的父类(爷爷类)……

class A:
    def __init__(self):
        self.money = 10

    def eat(self):
        print('吃鲍鱼')


class B(A):
    def __init__(self):
        self.money = 100

class C(B):

    def eat(self):
        print('吃海参')
        super().eat()

ac = B()
# print(ac.money)

hzx = C()
# print(hzx.money)
hzx.eat()

1.5 多继承

多继承:一个儿子有多个父亲(到处认爹),一个子类继承多个父类

当继承中出现相同的方法则继承顺序是从左到右

class Horse:
    def body(self):
        print('体型健壮')

class Donkey:

    def body(self):
        print('体型娇小')

class Mule(Horse , Donkey):
    pass

class Mule_2(Donkey , Horse):
    pass

m = Mule()
# m.body()


# 查看继承顺序的
print(Mule.__mro__)
print(Horse.__mro__)

# 查看父类 , 不会出现object , 以元组的形式放回,没有继承类返回object
print(Mule.__bases__)
print(Horse.__bases__)

# 返回得到一个父类,多个父类返回最左边的 , 没有继承类返回object
print(Mule.__base__)
print(Horse.__base__)

二、多态

不同的对象 , 调用同一个方法,表现出不同的形式

多态的实现:1、必须要有类的继承;2、子类重写父类的方法

class Bus:
    def ticket(self):
        print('票价单价5')

class Car(Bus):

    def ticket(self):
        print('票价单价50')

class Train(Car):

    def ticket(self):
        print('票价单价90')

class People:

    def money(self , c):
        c.ticket()


b = Bus()
c = Car()
t = Train()
b.ticket()
c.ticket()
t.ticket()

ac = People()
ac.money(b)
ac.money(t)
ac.money(c)