面向对象的三大特性
- 封装:根据职责将属性和方法封装到一个抽象的类中
- 继承:实现代码的重用,相同的代码不需要重复的编写
- 多态:不同的子类对象调用相同的父类方法,产生不同的执行结果
- 多态可以增加代码的灵活度
- 以继承和重写父类方法为前提
- 是调用方法的技巧 不会影响到类的内部设计
案例演练:需求:
- 在Dog类中封装方法game,普通狗只是单纯的玩耍
- 定义XiaoTianDog继承自Dog,并且重写game方法,哮天犬需要在天上玩耍
- 定义Person类,并且封装一个和狗玩的方法,在方法内部,直接让狗对象调用game方法
class Dog(object):
def __init__(self, name):
self.name = name
def game(self):
print("%s单纯的玩耍" % self.name)
class XiaoTianDog(Dog):
def game(self):
print("%s在天上玩" % self.name)
class Person(object):
def __init__(self, name):
self.name = name
def game_with_dog(self, dog):
print("%s和%s快乐的玩耍" % (self.name, dog.name))
dog.game()
wangcai = Dog("旺财")
feitianwangcai = XiaoTianDog("飞天旺财")
xiaoming = Person("小明")
xiaoming.game_with_dog(wangcai)
xiaoming.game_with_dog(feitianwangcai)
案例小结:
- Person类中只需要让狗对象调用game方法,而不关心具体是什么狗,game方法是在Dog父类中定义的
- 在程序执行时,传入不同的狗对象实参,就会产生不同的执行效果