Python多态性,python中的多态是什么
众所周知,Python是一种弱类型语言,它最明显的特点就是在使用变量的时候,不需要为变量指定具体的数据类型。这将导致相同变量
可能被连续分配不同的类对象,例如:
class c语言:
defsay(self):
Print(赋值是CLanguage类的实例对象)
classCPython:
defsay(self):
Print(分配的值是CPython类的实例对象)
a=CLanguage()
说
a=CPython()
A.say()运行如下:
赋值是CLanguage类的实例对象。
可以看出A可以先后赋给CLanguage类和CPython类的对象,但这不是多态。类多态性,还要满足以下两个前提条件:继承性:多态性必须发生在子类和父类之间;覆盖:子类覆盖父类的方法。
以下程序是对上述代码的重写:
class c语言:
defsay(self):
Print(“调用Clanguage类的say方法”)
classCPython(CLanguage):
defsay(self):
Print(“调用CPython类的say方法”)
classCLinux(语言):
defsay(self):
Print(“调用CLinux类的say方法”)
a=CLanguage()
说
a=CPython()
说
a=CLinux()
A.say()执行结果
正在调用Clanguage类的say方法。
正在调用CPython类的say方法。
它调用CLinux类的say方法。如你所见,CPython和CLinux都继承自CLanguage类,并且它们都覆盖了父类的say()方法。从运行结果可以看出,当同一个变量A执行同一个say()方法时,由于A实际上代表了不同的类实例对象,a.say()并不调用同一个类中的say()方法,这就是多态性。
然而,仅在这里,读者无法领略Python类使用多态性的精髓。事实上,Python基于多态性衍生出了一种更加灵活的编程机制。
继续重写上面的程序:
谁说:
defsay(self,who):
who.say()
class c语言:
defsay(self):
Print(“调用Clanguage类的say方法”)
classCPython(CLanguage):
defsay(self):
Print(“调用CPython类的say方法”)
classCLinux(语言):
defsay(self):
Print(“调用CLinux类的say方法”)
a=WhoSay()
#调用CLanguage类的say()方法
say(CLanguage())
#调用CPython类的say()方法
a.say(CPython())
#调用CLinux类的say()方法
A.a.say(CLinux())程序的执行结果是:
正在调用Clanguage类的say方法。
正在调用CPython类的say方法。
被调用的是CLinux类的say方法。在这个程序中,通过向WhoSay类中的Say()函数添加一个who参数,它使用传入的who在内部调用say()方法。这意味着当
当使用WhoSay类中的Say()方法时,如果我们传递who参数的实例对象,它将调用该类中的say()方法。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。