知行编程网知行编程网  2022-11-30 03:30 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于一文带你了解python中的多态的相关知识,包括python的多态意义吗,以及常态化动态这些编程知识,希望对大家有参考作用。

本文带你了解python中的多态

我们都知道Python是一种弱类型语言,它最明显的特点就是在使用变量的时候,不需要为它们指定具体的数据类型。这导致了相同变量的情况

可能会被先后赋值不同的类对象,例如:

class CLanguage:
    def say(self):
        print("赋值的是 CLanguage 类的实例对象")
class CPython:
    def say(self):
        print("赋值的是 CPython 类的实例对象")
a = CLanguage()
a.say()
a = CPython()
a.say()

运行结果为:

赋值的是 CLanguage 类的实例对象
赋值的是 CPython 类的实例对象

可见a可以依次赋值给CLanguage类和CPython类的对象,但这不是多态。一个类的多态特性还必须满足以下两个前提条件: 继承:多态性必须发生在子类和父类之间;重写:子类重写父类的方法。


下面程序是对上面代码的改写:

class CLanguage:
    def say(self):
        print("调用的是 Clanguage 类的say方法")
class CPython(CLanguage):
    def say(self):
        print("调用的是 CPython 类的say方法")
class CLinux(CLanguage):
    def say(self):
        print("调用的是 CLinux 类的say方法")
a = CLanguage()
a.say()
a = CPython()
a.say()
a = CLinux()
a.say()

执行结果

调用的是 Clanguage 类的say方法
调用的是 CPython 类的say方法
调用的是 CLinux 类的say方法

可以看出,CPython和CLinux都是继承自CLanguage类,并且各自重写了父类的say()方法。从运行结果可以看出,当同一个变量a执行同一个say()方法时,由于a实际上代表了不同的类实例对象,所以a.say()并没有调用同一个类中的say()方法,这样是多态性。

然而,仅仅学习到这里,读者还不能体会到在Python类中使用多态特性的本质。事实上,Python在多态性的基础上衍生出一种更加灵活的编程机制。

继续对上面的程序进行改写:

class WhoSay:
    def say(self,who):
        who.say()
class CLanguage:
    def say(self):
        print("调用的是 Clanguage 类的say方法")
class CPython(CLanguage):
    def say(self):
        print("调用的是 CPython 类的say方法")
class CLinux(CLanguage):
    def say(self):
        print("调用的是 CLinux 类的say方法")
a = WhoSay()
#调用 CLanguage 类的 say() 方法
a.say(CLanguage())
#调用 CPython 类的 say() 方法
a.say(CPython())
#调用 CLinux 类的 say() 方法
a.say(CLinux())

程序执行结果为:

调用的是 Clanguage 类的say方法
调用的是 CPython 类的say方法
调用的是 CLinux 类的say方法

在这个程序中,通过在WhoSay类中的say()函数中添加一个who参数,在内部使用传入的who来调用say()方法。这意味着当调用

在WhoSay类中使用say()方法时,我们将哪个类实例对象传递给who参数,它就会调用该类中的say()方法。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享