class Bird:
def move(self,field):
print('鸟在%s上自由的飞翔' % field)
class Dog:
def move(self,field):
print('狗在%s里飞快的奔跑' % field)
# 由于x所指向的对象不同,因此它呈现出不同的行为特征。这就是多态。
x = Bird()
x.move('蓝天') #创建实例,调用方法
x = Dog()
x.move('草地')
#当同一个变量在调用同一个方法时,完全可能呈现出多种行为
# (具体呈现出哪种行为由变量所引用的对象来决定。),这就是多态Polymorshism
# 画布类,定义了draw_pic方法,负责绘制不同的图形
# draw_pic()方法 需要传一个shape参数,draw_dic() 去调用shape的draw方法
# draw_pic()方法 需要传一个shape对象,该对象要有一个draw()方法,每个对象的draw()方法是
# 自己去实现,所以不同的对象调用各自的draw就呈现出了不同的结果,即多态
class Canvas:
# 画图片,需要传一个图形的参数,需要绘什么图形
def draw_pic(self,shape):
print('------开始绘图-----')
# Python 是动态类型语言,它不会在编译时检查 shape 到底是什么类型,
# 而是运行时才看这个对象有没有 draw 方法。
shape.draw(self)
class Rectangle:
def draw(self,canvas):
print('在%s上绘制矩形' % canvas)
class Triangle:
def draw(self,canvas):
print('在%s上绘制三角形' % canvas)
class Circle:
def draw(self,canvas):
print('在%s上绘制圆形' % canvas)
c = Canvas()
c.draw_pic(Rectangle())
c.draw_pic(Triangle())
c.draw_pic(Circle())