【目录】
一、多态和多态性
二、鸭子类型
class Animal: #同一类事物:动物 def talk(self): pass class Cat(Animal): #动物的形态之一:猫 def talk(self): print(‘喵喵喵‘) class Dog(Animal): #动物的形态之二:狗 def talk(self): print(‘汪汪汪‘) class Pig(Animal): #动物的形态之三:猪 def talk(self): print(‘哼哼哼‘) #实例化得到三个对象 cat=Cat() dog=Dog() pig=Pig()
class Animal: #同一类事物:动物 def talk(self): pass class Cat(Animal): #动物的形态之一:猫 def talk(self): print(‘喵喵喵‘) class Dog(Animal): #动物的形态之二:狗 def talk(self): print(‘汪汪汪‘) class Pig(Animal): #动物的形态之三:猪 def talk(self): print(‘哼哼哼‘) #实例化得到三个对象 cat=Cat() dog=Dog() pig=Pig() cat.talk() # 喵喵喵 dog.talk() # 汪汪汪 pig.talk() # 哼哼哼
class Animal: #同一类事物:动物 def talk(self): pass class Cat(Animal): #动物的形态之一:猫 def talk(self): print(‘喵喵喵‘) class Dog(Animal): #动物的形态之二:狗 def talk(self): print(‘汪汪汪‘) class Pig(Animal): #动物的形态之三:猪 def talk(self): print(‘哼哼哼‘) #实例化得到三个对象 cat=Cat() dog=Dog() pig=Pig() def Talk(animal): animal.talk() Talk(cat) # 喵喵喵 Talk(dog) # 汪汪汪 Talk(pig) # 哼哼哼
class Animal: #同一类事物:动物 def talk(self): pass class Wolf(Animal): #动物的另外一种形态:狼 def talk(self): print(‘嗷...‘) wolf=Wolf() # 实例出一头狼 wolf.talk() # 使用者根本无需关心wolf是什么类型而调用talk
import abc # 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化 class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法 def talk(self): # 抽象方法中无需实现具体的功能 pass class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准 def talk(self):# 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化 # TypeError: Can‘t instantiate abstract class Cat with abstract methods talk pass cat=Cat()
#二者看起来都像文件,因而就可以当文件一样去用,然而它们并没有直接的关系 class Txt: #Txt类有两个与文件类型同名的方法,即read和write def read(self): pass def write(self): pass class Disk: #Disk类也有两个与文件类型同名的方法:read和write def read(self): pass def write(self): pass
参考:
https://zhuanlan.zhihu.com/p/109334326
https://www.cnblogs.com/linhaifeng/articles/7340687.html
【2020Python修炼记】面向对象编程——多态性与鸭子类型
原文:https://www.cnblogs.com/bigorangecc/p/12671363.html