7.18. 多态-鸭子类型¶
python语言本身就是动态语言,本身支持多态,不需要使用前先定义 元素类型
它不关心元素的类型
它会自动根据传入的参数进行 自动调用它本身的方法
7.18.1. 用代码来理解¶
多态¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
class Animal(object):
def run(self):
print("动物跑......")
class Dog(Animal):
def run(self):
print("狗狗跑.....")
class Car(Animal):
def run(self):
print("汽车跑.....")
if __name__ == '__main__':
f1 = Animal() # 没有发生多态
f1.run()
f2 = Dog() # 发生多态
f2.run()
f3 = Car() # 发生多态
f3.run()
鸭子类型代码示例1¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
class Dog(object):
def say(self):
print("a dog")
class Cat(object):
def say(self):
print("a cat")
class Duck(object):
def say(self):
print("a duck")
# animal_list = [Dog, Cat, Duck]
#
# for animal in animal_list:
# animal().say()
def yazi(func):
func.say()
a = Dog()
b = Cat()
yazi(a)
yazi(b)
鸭子类型代码示例2¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/6 14:51
# filename: 鸭子类型2.py
class Animal(object):
def run(self):
print("动物跑......")
class Dog(Animal):
def run(self):
print("狗狗跑.....")
class Car:
def run(self):
print("汽车跑.....")
def go(animal): #参数是Animal
animal.run()
hu1 = Animal()
hu2 = Dog()
hu3 = Car()
go(hu1)
go(hu2)
go(hu3)
eg
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/14 14:25
# filename: 多态性2.py
# class Canvas:
# def draw_pric(self, shaps):
# print("开始绘图".center(100, "-"))
# shaps.shop(self)
def draw_pric(shaps):
print("开始绘图".center(100, "-"))
shaps.shop()
class Rectangle:
def __init__(self, name):
self.name = name
def shop(self):
print("在{}上绘制矩形".format(self.name))
class Triangle:
def __init__(self, name):
self.name = name
def shop(self):
print("在{}上绘制三角形".format(self.name))
class Circle:
def __init__(self, name):
self.name = name
def shop(self):
print("在{}上绘制圆形".format(self.name))
# c = Canvas()
#
# hu = Rectangle()
#
# # 传入Rectangle参数绘制矩形
# c.draw_pric(Rectangle())
#
# # 传入Triangle参数绘制三角形
# c.draw_pric(Triangle())
#
# #传入Circle参数绘制圆形
# c.draw_pric(Circle())
juxing = Rectangle("白纸上")
sanjiaoxing = Rectangle("黑板上")
yuanxing = Rectangle("衣服上")
draw_pric(juxing)
draw_pric(sanjiaoxing)
draw_pric(yuanxing)
输出信息
------------------------------------------------开始绘图------------------------------------------------
在白纸上上绘制矩形
------------------------------------------------开始绘图------------------------------------------------
在黑板上上绘制矩形
------------------------------------------------开始绘图------------------------------------------------
在衣服上上绘制矩形