时间:2022-04-17 08:59:28 | 栏目: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...