python 第十七章 面向对象三大特征—继承,多态

78 阅读2分钟

大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习python,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力

二,继承

继承:生活中,儿子继承父亲的财产(富二代,拆二代)在Python也是存在继承关系的,被继承的类叫做父类 子类继承父类的方法和属性。

  • 继承可以解决重复写类的代码 造成冗余
  • 在Python中所有类都继承于object,object就是基类,超类
  • Python3默认继承object

1. 继承

一个子类继承于父类

父类中的私有属性和私有方法,子类是无法继承的


class Father:
    def __init__(self):
        self.name = '皇帝'
        self.clother = '龙袍'

    def eat(self):
        print('吃牛排')


# class 子类(父类)
class Son(Father):
    pass

al = Son()
print(al.clother)
al.eat()

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

子类中重写init方法,那么实例对象就会访问自己的实例属性,不会去找父类的属性,或者方法

class Father:
    def __init__(self):
        self.name = '皇帝'
        self.clother = '龙袍'

    def eat(self):
        print('吃牛排')


# class 子类(父类)
class Son(Father):
    def __init__(self):
        # 这里进行了重写 父类属性
        self.name = '张三'
        self.clother = '紧身衣'
    
    # 重写方法
    def eat(self):
        print('吃 烧烤')

al = Son()
print(al.clother)
al.eat()

1.3 属性查找

对象在寻找属性的时候, ----》自身属性,---》所在类中查找---》父类中
对象在寻找方法----》所在类中查找-----》父类中

2.多层继承

多层继承即子类继承父类,父类继承对应的父类

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('吃奥龙')
      


wx = B()
# print(wx.money)  # 100
wx.eat()
af = C()
print(af.money)
af.eat()

3.多继承

多继承:一个子类继承多个父类

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


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

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


class Animal(Er, Yin):
    pass

class Animal2(Yin, Er):
    pass


# a = Animal()
# a.body()
# print('-----------b-----------')
# b = Animal2()
# b.body()

# 查看继承顺序
# print(Animal.__mro__)
# print('-----2------')
# print(Animal2.__mro__)


# 查看父类  返回的是元组  不会出现object , 没有继承类 返回object
# print(Animal.__bases__)
# print('-----3--------')
# print(Animal2.__bases__)

# 查看一个父类  返回的是最左的父类   不会出现object , 没有继承类 返回object
print(Animal.__base__)
print('-----4--------')
print(Animal2.__base__)

三,多态

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

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


class Cat:
    def info(self):
        print("我是小猫,我是名字是keitty, 我 3岁")

    def sound(self):
        print('喵')


class Dog:
    def info(self):
        print("我是小狗,我是名字是二哈, 我 4岁")

    def sound(self):
        print('汪汪')

cat = Cat()
dog = Dog()


class Animal(Cat,Dog):
    def sound(self):
        super().sound()

an1 = Animal()
an2 = Animal()
for animal in (an1,an2):
    animal.sound()
    animal.info()
    animal.sound()