当前位置 博文首页 > Python 面向对象编程的三大特性之继承
关系
现有
的 class 继承子类(Subclass
)父类
、基类
、超类
动物是父类
,猫、狗是动物的子类
菠萝、大菠萝是人类的子类
动物、人类是生物的子类
超类、祖父类
拥有
父类的所有属性、方法,提高了代码的可扩展性和重用性重新定义
某些属性,并重写
某些方法,即覆盖
父类的属性、方法,变成子类独有的属性、方法公共的
属性和方法公共的
属性和方法提取作为父类(基类)的属性、方法,而特殊的属性、方法则在本类中定义具体可以看下面的【不使用继承、使用继承的区别】
单继承
多继承
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...