python学习面向对象之多态的那些事儿

先上概念:

  • 多态是面向对象编程中的一个重要概念,指的是同一种操作作用于不同的对象上时,可以产生不同的行为。多态性允许同样的方法名在不同的对象上有不同的实现,这样可以提高代码的灵活性和可扩展性。
  • 在多态的情况下,程序可以根据对象的类型调用相应的方法,而不需要知道具体对象的类型。这样,不同的类可以实现相同的接口或继承相同的父类,并提供各自的实现,使得代码更容易扩展和维护。

前言

话说始皇最几天都闷闷不乐,内心后悔,表面坚强,因为不久之前他做一个件蠢事,把最像自己的皇二亲手给改性,皇二的事迹请稳步到python学习面向对象之继承的那些事儿了解。

第一章 始皇良苦用心

事已至此,始皇再看着剩下的两个逆子,直直的摇头。这时旁边的王公公提醒始皇道:”大王,听说农业府(abc模块)的王丞相(Minister类)是能说会道,能歌能舞,呕不,是能征善战,是个不可多得的将才,何不叫来教教两个殿下“,”你真提是举贤不避亲啊,宣“,皇始开心的说到。

import abc   # abstract class
class Minister(metaclass = abc.ABCMeta):   # 通过继承metaclass声明Minister是抽象类
'''【类Minister】作为抽象类,只能被继承,不能被实例化'''
    @abc.abstractmethod
    def speak(self):   # 定义抽象类方法   # 也就是继承Minister类的子类中必须有speak这个方法
        pass
    @abc.abstractmethod
    def work(self):   # 定义抽象类方法   # 也就是继承Minister类的子类中必须有work这个方法
        pass

王丞相(Minister类)接了圣旨,但是又不想离开这里的温柔乡,想了很久终于想出一个招,主身留下,派出个分生过去就好了。于是就开始念咒语”分身起,分身来“

fs=Minister()

===========此处法术失效===============
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[2], line 10
      6     @abc.abstractmethod
      7     def work(self):   # 定义抽象类方法   # 也就是继承Minister类的子类中必须有work这个方法
      8         pass
---> 10 fs=Minister()

TypeError: Can't instantiate abstract class Minister with abstract methods speak, work

 Minister类---抽象类是不可以被实例化的,只能被继承。

真无语,农业府只能派真身去,对造假事情只有一字,”不准“。至此,王丞相动身前往皇宫了。

第二章 皇子的功课

皇大,皇三:听说这个王丞相又会说speak()又有本事work(),我们俩是要跟着他,估计接下来的日子肯定不好过了,但是两人都觊觎皇位,也默默的下苦心学习。

class Hda(Minister):#皇大
    def speak(self):
        print("我是皇大,传长不传幼,皇位早晚会是我的")
    # def work(self):
    #      print("脚踏实地,才能好好做人")
        

        
class Hsan(Minister):#皇三
    def speak(self):
        print("我是皇三,在这个靠实力说话的世界,隐藏野心才能活得久,二哥的事迹历历在目啊")
    def work(self):
         print("但行好事莫问前程")

经过三年学习,两个皇子都学会了王丞相那能说会道、能歌能武的本事。到了始皇检验成果的时候了。

def check_minister_speak(minister):
    minister.speak()
def check_minister_work(minister):
    minister.work()

始皇说道:”把你们的技能亮出来,老三,你先来。“

laosan = Hsan()
check_minister_speak(laosan)
print("==此处暂停N秒==============================")
check_minister_work(laosan)

#----------------------------------------------------
#我是皇三,在这个靠实力说话的世界,隐藏野心才能活得久,像二哥学习
#==此处暂停N秒==============================
#只管干活,但行好事莫问前程

始皇看着皇三的表现,非常的满意,”老大,到你了“

laoda = Hda()
check_minister_speak(laoda)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[14], line 30
     24     minister.work()
     25 # laosan = Hsan()
     26 # check_minister_speak(laosan)
     27 # print("==此处暂停N秒==============================")
     28 # check_minister_work(laosan)
---> 30 laoda = Hda()
     31 check_minister_speak(laoda)

TypeError: Can't instantiate abstract class Hda with abstract method work

皇始:”混帐东西,不学无术,太让我失望了“

皇大:”不,父皇,我学了speak()技能了,只是work()这种事情交待给下人做就好了,我根本无需要学啊“

始皇:”混帐,当大王的我每天都得干活,你这居然不学,退出去,回去好好学,学不会不能离宫,别来见我!“

皇大接受了教训,回去日夜的学习work()工作,改正了做风。

class Hda(Minister):
    def speak(self):
        print("我是皇大,传长不传幼,皇位早晚会是我的")
    def work(self):
        print("脚踏实地,才能好好做人")
        

laoda = Hda()
check_minister_speak(laoda)
# print("==此处暂停N秒==============================")
check_minister_work(laoda)

#--------------------------------------------------------
我是皇大,传长不传幼,皇位早晚会是我的
脚踏实地,才能好好做人

第三章 皇位钦定

始皇:经过深思后,觉得老三是个不可多得的将才,做事有条不稳,体智育德美,全面发展,孤甚感欣慰。老大呢,除了懒,但是改正态度十分的诚恳,深得孤心意,老三你以后要好好的辅佐你皇大,把皇家传承下去”。

老三黑着脸,心里默念十个"QS"

全剧终

全代码

import abc   # abstract class
class Minister(metaclass = abc.ABCMeta):   # 通过继承metaclass声明Minister是抽象类
    @abc.abstractmethod
    def speak(self):   # 定义抽象类方法   # 也就是继承Minister类的子类中必须有speak这个方法
        pass
    @abc.abstractmethod
    def work(self):   # 定义抽象类方法   # 也就是继承Minister类的子类中必须有work这个方法
        pass

class Hda(Minister):
    def speak(self):
        print("我是皇大,传长不传幼,皇位早晚会是我的")
    def work(self):
         print("脚踏实地,才能好好做人")
        
class Hsan(Minister):
    def speak(self):
        print("我是皇三,在这个靠实力说话的世界,隐藏野心才能活得久,像二哥学习")
    def work(self):
         print("只管干活,但行好事莫问前程")

def check_minister_speak(minister):
    minister.speak()
def check_minister_work(minister):
    minister.work()
laosan = Hsan()
check_minister_speak(laosan)
print("==此处暂停N秒==============================")
check_minister_work(laosan)

laoda = Hda()
check_minister_speak(laoda)
# print("==此处暂停N秒==============================")
check_minister_work(laoda)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值