@H_502_5@# **************************************************************************# Python学习# **************************************************************************# ** 所属主题: 类# ** 所属分层: 06 面向对象三大特性--多态.py# ** 功能描述: 06 面向对象三大特性--多态.py# ** 创 建 者: 陈红伟# ** 创建日期: 2021/6/20 10:38 下午# **************************************************************************# ** 修改日期 修改人 修改内容# ** 2021/6/20 陈红伟 新增学习内容代码# **************************************************************************"""多态: 1、什么叫多态: 同一个事物多种形态"""class Anmial: passclass People(Anmial): passclass Dog(Anmial): passclass Pig(Anmial): pass""" 2、为何要有多态,多态会带来什么特性: 多态性"""class Anmial: def say(self): print("动物基本的发声频率...") passclass People(Anmial): def say(self): super().say() print('人 嘤嘤嘤') passclass Dog(Anmial): def say(self): super(Dog, self).say() print("狗 汪汪汪") passclass Pig(Anmial): def say(self): # super(Dog, self).say() print("猪 哼哼哼") passpig = Pig()pig.say() # 猪 哼哼哼# [体现多态]的好处:# 定义一个统一的接口,接收传入的动物的对象def animal_say(animal): animal.say()animal_say(Pig()) # 猪 哼哼哼animal_say(People())# 动物基本的发声频率...# 人 嘤嘤嘤animal_say(Anmial())# 动物基本的发声频率...animal_say(Dog())# 动物基本的发声频率...# 狗 汪汪汪# 多态应用:def my_len(obj): return obj.__len__() print(my_len("hello")) # 5print(my_len({'a':1,'b':2})) # 2print(my_len([1,2,3])) # 3# 但是这样有个问题,没有强制限制继承的子类中要求实现say方法,就算不实现,会去父类中找,也不会报错,那怎么才能强制实现呢?# 类似于java的接口一样呢?# 答案就是 abc ,引入一个抽象基类的方法import abc # 类似于java中接口的概念class Animal(Metaclass=abc.ABCMeta): # 统一所有子类的标准,不能被实例化了 @abc.abstractmethod # 抽象方法,继承类该类就必须实现该方法 def eat(self): pass class Fish(Animal): passclass Cat(Animal): def eat(self): print("cat: eatting...")cat = Cat()cat.eat() # cat: eatting...# Fish().eat() # TypeError: Can't instantiate abstract class Fish with abstract methods eat 因为没有实现父类中的该方法不能用# 注意⚠️:# a = Animal()# TypeError: Can't instantiate abstract class Animal with abstract methods eat# 用来统一标准(加上了(Metaclass=abc.ABCMeta))的类不能被实例化了# 鸭子类型:类之间可以没有继承关系,但是每个类都有一个相同的方法名(例如say())# linux系统: 多态思路(一切皆文件)总结
以上是内存溢出为你收集整理的Python基础54:面向对象三大特性--多态全部内容,希望文章能够帮你解决Python基础54:面向对象三大特性--多态所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)