0.前言
这篇博客主要是通过例题加强对Python面向对象编程技术中继承概念的理解。
问题1:
1.动物有吃东西、睡觉的动作
2.狗子除了吃东西、睡觉,还可以汪汪叫
3.飞天神狗除了吃东西、睡觉,可以嗷嗷叫和飞天
分析:
1.类——动物、狗子、飞天狗
2.属性方法——动物(吃东西、睡觉),狗子(吃东西、睡觉、汪汪叫),神狗(吃东西、睡觉、嗷嗷叫、飞行)
3.父类为动物、子类一代为狗子、子类二代为飞天狗。
4.狗子类拥有动物类的全部方法外,还有汪汪叫的方法。
5.飞天狗除了拥有动物类和狗子类的所有方法外,叫声从汪汪叫变成了嗷嗷叫,除此之外还能飞。
代码如下:
# 创建动物类
class Animal:
# 创建吃的方法
def eat(self):
print('[动物]吃东西!')
# 创建睡觉的方法
def move(self):
print('[动物]移动')
# 创建狗子类
class Dog(Animal):
# 重写移动方法
def move(self):
print('[普通狗子]四条腿跑!')
# 创建叫的方法
def bark(self):
print('[普通狗子]汪汪叫!')
def wag_tail(self):
print('[普通狗子]摇尾巴!')
# 创建飞天神狗类
class Flydog(Dog):
# 重新父类叫的方法
def bark(self):
print('[飞天神狗]嗷嗷叫!')
# 创建飞的方法
def move(self):
print('[飞天神狗]飞上天了!')
print('动物类对象:')
# 创建动物的对象
animal = Animal()
animal.move()
# 父类对象不能调用子类方法
# animal.bark()
print('-'*50)
print('狗子对象:')
# 创建狗子的对象
ordinary_dog = Dog()
# 调用父类方法
ordinary_dog.eat()
# 调用重写方法
ordinary_dog.move()
# 调用自己方法
ordinary_dog.bark()
ordinary_dog.wag_tail()
print('-'*50)
print('飞天狗子对象:')
# 创建飞天神狗的对象
fly_dog = Flydog()
# 调用父类方法
fly_dog.eat() # 调用父类Dog的父类Animal的方法
fly_dog.wag_tail() # 调用父类Dog的方法
# 调用重写方法
fly_dog.bark()
fly_dog.move()
运行结果:
动物类对象:
[动物]移动
--------------------------------------------------
狗子对象:
[动物]吃东西!
[普通狗子]四条腿跑!
[普通狗子]汪汪叫!
[普通狗子]摇尾巴!
--------------------------------------------------
飞天狗子对象:
[动物]吃东西!
[普通狗子]摇尾巴!
[飞天神狗]嗷嗷叫!
[飞天神狗]飞上天了!
说明:
- 子类继承父类后,享有父类的所有属性和方法。(如上面程序中的狗子类和飞狗类都可以调用动物类的方法。)
- 子类可以调用父类的方法,但父类不能调用子类的方法
- 若父类中的属性和方法不能满足子类需求时,可以在子类中定义新的方法。(如狗子类中的bark方法和飞狗类的fly方法)
- 若父类中的方法不是子类中所想要的结果,则可以在子类中定义一个与父类同名的方法来重写父类中的方法。(如飞狗类的bark方法)
- 父类中修改属性和方法对子类也有影响,子类中修改或重写方法,对父类没有任何影响。(如普通狗调用bark方法和飞狗对象调用bark方法)
时间:2019年5月6日23:27:16