先上概念:
- 多态是面向对象编程中的一个重要概念,指的是同一种操作作用于不同的对象上时,可以产生不同的行为。多态性允许同样的方法名在不同的对象上有不同的实现,这样可以提高代码的灵活性和可扩展性。
- 在多态的情况下,程序可以根据对象的类型调用相应的方法,而不需要知道具体对象的类型。这样,不同的类可以实现相同的接口或继承相同的父类,并提供各自的实现,使得代码更容易扩展和维护。
前言
话说始皇最几天都闷闷不乐,内心后悔,表面坚强,因为不久之前他做一个件蠢事,把最像自己的皇二亲手给改性,皇二的事迹请稳步到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)