继承
- 概念:
子类
拥有父类
的所有方法和属性
单继承
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
# class 子类(父类):
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoTianQuan(Dog):
def fly(self):
print("我会飞")
# 创建一个对象 - 狗对象
wangcai = Dog()
# 子类拥有父类的所有属性
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()
# 创建一个啸天犬的对象
xtq = XiaoTianQuan()
xtq.fly()
xtq.bark()
xtq.eat()
专业术语
Dog
类是Animal
类的子类,Animal
类是Dog
类的父类,Dog
类从Animal
类继承Dog
类是Animal
类的派生类,Animal
类是Dog
类的基类,Dog
类从Animal
类派生
方法的重写 – 覆盖父类方法
如果在开发中,父类的方法实现和子类的方法实现完全不同
就可以使用覆盖的方式, 在子类中重新编写父类的方法实现
具体的实现方式,就相当于在子类中定义一个和父类同名的方法并且实现
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
# class 子类(父类):
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoTianQuan(Dog):
def fly(self):
print("我会飞")
def bark(self):
print("叫得跟神一样...")
xtq = XiaoTianQuan()
# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()
扩展父类方法
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
# class 子类(父类):
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoTianQuan(Dog):
def fly(self):
print("我会飞")
def bark(self):
# 1. 针对子类特有的需求,编写代码
print("叫得跟神一样...")
# 2. 使用 super(). 调用原本在父类中封装的方法
super().bark()
# 在更早的python版本中,使用 父类名.方法(self)
# Dog.bark(self) # 在这里如果使用当前子类名调用方法 XiaoTianQuan.bark(self),会形成递归调用,出现死循环
# 3. 增加其它子类的代码
print("#$$%%%^^^^")
xtq = XiaoTianQuan()
# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()
子类对象 不能 在自己的方法内部,直接访问父类的私有属性或者私有方法
子类对象可以通过父类的公有方法间接访问到私有属性或者私有方法
也就是父类的公有方法中包含私有属性和私有方法,子类通过调用父类公有方法也能够调用到包含在公有方法下的私有属性和私有方法