寒假自学(六)

希望所有温柔又可爱的人最后都能幸福❤

今日总结:

代码量 200行
博客量 一篇
所学时间 4小时左右
了解到的知识点 python面向对象继承

明日计划:

早上 python面向对象多态
下午 python单例设计模式
晚上

具体内容:

继承

继承实现代码的重用,相同的代码不需要重复的编写

继承子类拥有父类的所有方法属性

class Animal:
    def eat(self):
        print("吃---")

    def drink(self):
        print("喝---")

    def run(self):
        print("跑---")

    def sleep(self):
        print("睡---")


class Dog(Animal):
    def bark(self):
        print("汪汪叫")


xsy = Dog()

xsy.eat()
xsy.drink()
xsy.run()
xsy.sleep()
xsy.bark()
  • 子类继承父类,可以直接享受父类中已经封装好的方法,不需要再次开发

  • 子类中应该根据职责,封装子类特有的属性和方法

专业术语

  • Dog类是Animal类的子类Animal类是Dog类的父类Dog类从Animal继承
  • Dog类是Animal类的派生类Animal类是Dog类的基类Dog类从Animal派生

继承的传递性

  • C类从B类继承,B类又从A类继承

  • 那么C类就具有B类和A类的所有属性和方法

子类拥有父类以及父类的父类中封装的所有属性方法

image-20210110115859926

class Animal:
    def eat(self):
        print("吃---")

    def drink(self):
        print("喝---")

    def run(self):
        print("跑---")

    def sleep(self):
        print("睡---")


class Dog(Animal):
    def bark(self):
        print("汪汪叫")


class XiaoSongYue(Dog):
    def fly(self):
        print("我会飞")


class Cat(Animal):
    def catch(self):
        print("抓老鼠")


xsy = XiaoSongYue()

# xsy.catch()
xsy.fly()
xsy.eat()
xsy.drink()
xsy.run()
xsy.sleep()
xsy.bark()

方法的重写

  • 子类拥有父类的所有方法属性

  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

父类的方法实现不能满足子类需求时,可以对方法进行重写

具体实现就相当于在子类中定义了一个跟父类同名方法

class Animal:
    def eat(self):
        print("吃---")

    def drink(self):
        print("喝---")

    def run(self):
        print("跑---")

    def sleep(self):
        print("睡---")


class Dog(Animal):
    def bark(self):
        print("汪汪叫")


class XiaoSongYue(Dog):
    def fly(self):
        print("我会飞")

    def bark(self):
        print("神一样的叫唤...")
        # 使用super(),调用原本在父类中封装的方法
        super().bark()
        print("*%*$**%#*%$*^*$^*$^")


xsy = XiaoSongYue()

xsy.bark()

  1. 子类对象不能在自己方法内部,直接访问父类的私有属性私有方法
  2. 子类对象可以通过父类公有方法间接访问到私有属性私有方法

多继承

  • 子类可以拥有多个父类,并且具有所有父类属性方法
class A:
    def test(self):
        print("A---test 方法")

    def demo(self):
        print("A---demo 方法")


class B:
    def test(self):
        print("B---test 方法")

    def demo(self):
        print("B---demo 方法")


class C(A, B):
    pass


# 创建子类对象

c = C()

c.test()
c.demo()
print(C.__mro__)

避免父类中出现同名方法,通过__mro__查看执行顺序

新式类与旧式类

objectpython为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看

python3.x中如果没有指定父类,默认使用object基类

posted @ 2021-01-08 23:29  DemonSlayer  阅读(69)  评论(0编辑  收藏  举报