Python多态性,python中的多态是什么

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: