Python - 面向对象编程 - 三大特性之继承

时间:2021-09-02 16:15:19   收藏:0   阅读:21

继承

 

继承的实际栗子

 

继承的好处

 

继承的使用场景

具体可以看下面的【不使用继承、使用继承的区别】

 

继承有几种?

  1. 单继承
  2. 多继承

 

Python 中继承的简单语法

class Parent:
    pass

class Child(Parent):
    pass

  

有个重点

所有类的都有一个共同父类,就是 object,默认会继承它,写或不写都一样

class Parent:
    pass

class Parent(object):
    pass

 

不使用继承、使用继承的区别

需求背景

有一个动物类、狗类、猫类

 

不使用继承

类图

技术分享图片

 

需求分析

 

实际代码

# 不使用继承
class Animal:
    def eat(self):
        print("吃东西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat:
    def eat(self):
        print("吃东西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")

    def miao(self):
        print("喵喵叫...")


class Dog:
    def eat(self):
        print("吃东西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")

    def wang(self):
        print("汪汪叫...")

 

这样写有什么问题?

 

使用继承

类图

技术分享图片

从类图就能看到,使用继承就变得简单多了

 

需求分析

 

实际代码

# 使用继承
class Animal:
    def eat(self):
        print("吃东西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat(Animal):
    def miao(self):
        print("喵喵叫...")


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

 

优势

 

专业术语总结

  

继承的传递性

什么是传递性

通俗来讲

 

官方来讲

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

 

实际栗子

 

类图

技术分享图片

 

实际代码

class Animal:
    def eat(self):
        print("吃东西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat(Animal):
    def miao(self):
        print("喵喵叫...")


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


class Chai(Dog):
    def shake(self):
        print("小柴柴摇尾巴...")


chai = Chai()
# 调用 父类的父类 的方法
chai.eat()
# 调用 父类 的方法
chai.wang()
# 调用 自己独有 的方法
chai.shake()


# 输出结果
吃东西...
汪汪叫...
小柴柴摇尾巴...

 

继承和抽象

抽象即抽取类似或者说比较像的部分

 

小栗子

技术分享图片

 

继承的重点

技术分享图片

  

代码栗子

class Animal:
    def __init__(self, name, age, sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

    # 提取的公共方法
    def eat(self):
        print(f"{self.__name} 正在吃饭....")

    @property
    def name(self):
        return self.__name


class Person(Animal):
    def walk(self):
        print(f"{self.name} 两条腿正在走路")


class Pig(Animal):
    def kill(self):
        print(f"{self.name} 猪正在去屠宰场ing...")


class Dog(Animal):
    def wang(self):
        print(f"{self.name} 汪汪叫ing...")


person = Person("小菠萝", 25, "Male")
pig = Pig("麦兜", 4, "")
dog = Dog("柴犬", 3, "")

# 调用父类的公共方法
person.eat()
pig.eat()
dog.eat()

# 调用子类独有的方法
person.walk()
pig.kill()
dog.wang()



# 输出结果
小菠萝 正在吃饭....
麦兜 正在吃饭....
柴犬 正在吃饭....

小菠萝 两条腿正在走路
麦兜 猪正在去屠宰场ing...
柴犬 汪汪叫ing...

  

原文:https://www.cnblogs.com/poloyy/p/15216652.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!