初学 Python 笔记【二十三】继承

面向对象的三个特性:

  1. 封装,根据职责将属性和方法封装到一个抽象的类中。(定义类的准则)
  2. 继承,实现代码的重用,相同代码不需要重复的编写。(设计类的技巧)
  3. 多态,不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度。

单继承

子类拥有父类的所有方法和属性。

语法:class 类名A(父类名B):

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

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

A类是B类的子类,B类是A类的父类,A类从B类继承。

A类是B类的派生类,B类是A类的基类,A类从B类派生。

【继承的传递性】

C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有属性和方法

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

多继承

子类可以拥有多个父类,并且具有所有父类的属性和方法

语法:class 子类名(父类名1, 父类名2, ...):

【注】:父类之间存在同名的属性或方法,应该尽量避免使用多继承

【不使用继承开发动物和狗】

class Anima:
    def eat(self):
        print("")

    def drink(self):
        print("")

    def run(self):
        print("")

    def sleep(self):
        print("")


class Dog:
    def eat(self):
        print("")

    def drink(self):
        print("")

    def run(self):
        print("")

    def sleep(self):
        print("")

    def bark(self):
        print("")


dog = Dog()
dog.bark()
dog.drink()
dog.eat()
dog.run()
dog.sleep()

【使用继承开发动物和狗】

class Anima:
    def eat(self):
        print("")

    def drink(self):
        print("")

    def run(self):
        print("")

    def sleep(self):
        print("")


class Dog(Anima):
    def bark(self):
        print("")


class HaShiQi(Dog):
    def fly(self):
        print("")

    # 子类方法重写
    def bark(self):
        # 1.子类特有需求代码
        print("汪汪汪")

        # 2.使用super(). 调用原本父类中封装的方法
        super().bark()

        # 3.增加其他子类的代码
        print("f!#df @#@#!#gfg")


dog = HaShiQi()
# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类重写后的方法
dog.bark()
dog.drink()
dog.eat()
dog.run()
dog.sleep()
dog.fly()

【多继承】

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

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


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

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


class C(A, B):
    """多继承可以让子类对象,同时具有多个父类的属性和方法"""
    pass


# 创建子类对象
c = C()

# 父类之间方法属性同名时,调用第一个父类的方法属性
c.test()
c.demo()

# 确定C类对象调用方法的顺序
# object是所有类的父类(基类)
print(C.__mro__)

猜你喜欢

转载自www.cnblogs.com/dc2019/p/13184962.html