Python基础54:面向对象三大特性--多态

Python基础54:面向对象三大特性--多态,第1张

概述#**************************************************************************#Python学习#**************************************************************************#**所属主题:类#**所属分层:06面向对象三大特性--多态.py#**功能描述:06面向对
@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:面向对象三大特性--多态所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1184611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存