继承
# @Time:2021/1/5 16:48
# @Author:李 祥
# @File:继承.py
# @Software:PyCharm
# 继承
# 面临问题:
# 相似类型的定义过程中,大量重复性的代码
# 继承的概念:
# 在类名后面添加小括号,其中填写继承自哪个类型。
# 对相同的属性或方法进行抽象,形成类别的提炼或分拆。
# 好处:
# 让类的定义具有更好的扩展性。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
class Pet:
def __init__(self, name):
self.name = name
print(f"一个名叫{self.name}的宠物出生了")
def eat(self):
print(f"{self.name}在吃东西...")
def sleep(self):
print(f"{self.name}在睡觉...")
def __bark(self):
print("叫一声")
class Dog(Pet): # 子类名(父类名)
# 继承了 pet所有有 pet除私有外的所有类/属性
def __init__(self, name, age, sex):
# self.name = name
# print(f"一个名叫{self.name}的宠物出生了")
super(Dog, self).__init__(name) # 替换上面
# 类型 对象
# super().__init__(name) # 两种写法
self.age = age
self.sex = sex
# 重写/覆盖
# 子类和父类有相同名称的方法。可以理解为子类对于父类行为的扩展或补充
def eat(self):
print("吃骨头")
# 追加内容
# 可以使用super()调用父类的方法
def sleep(self):
super().sleep()
print("做个美梦")
# 调用顺序 先调自己的,没有的话再调父类的
s = Dog("SS", 12, "雄")
s.eat()
s.sleep()
# s.__bark # 私有无法继承
print("-" * 50)
# 多继承
# 子类可以有多个父类
class Fulei(object): # object 终极父类
def eat(self):
print("父类的父类")
class Animal(Fulei):
test = "测试继承"
# def eat(self):
# print("Animal的eat方法")
# class Cat(Pet, Animal): # 横向顺序递减 纵向顺序递减
class Cat(Animal, Pet):
def eat(self):
super().eat()
c = Cat("cat")
print(c.test)
c.eat()
# print(Cat.mro()) # 调用顺序
print("-" * 50)