当前位置: 首页 > 图灵资讯 > 行业资讯> 一文带你了解python中的多态

一文带你了解python中的多态

发布时间:2025-03-04 22:16:50

众所周知,Python是一种弱型语言,其最明显的特征是在使用变量时不需要指定具体的数据类型。这会导致同一变量的情况

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

classCLanguage:
defsay(self):
print("CLanguage实例对象赋值")
classCPython:
defsay(self):
print("CPython类实例对象赋值")
a=CLanguage()
a.say()
a=CPython()
a.say()

运行结果如下:

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

可以看到,a 可以先后赋值 CLanguage 类和 CPython 类的对象,但这不是多态的。类的多态特性应满足以下要求 2 前提条件:继承:多态必须发生在子类和父类之间;重写:子类重写父类的方法。

以下程序是上述代码的重写:

classCLanguage:
defsay(self):
print("调用Clanguagesay方法")
classCPython(CLanguage):
defsay(self):
print("调用CPythonsay方法")
classCLinux(CLanguage):
defsay(self):
print("调用CLinuxsay方法")
a=CLanguage()
a.say()
a=CPython()
a.say()
a=CLinux()
a.say()

执行结果

调用Clanguage类的say方法
调用CPythonsay方法
调用CLinuxsay方法

可以看到,CPython 和 CLinux 都继承自 CLanguage 而且每个人都重写了父类 say() 方法。从操作结果可以看出,相同的变量 a 执行同一个 say() 因为方法 a 因此,实际上表示不同类别的实例对象 a.say() 调用的不是同一类 say() 方法,这就是多态。

然而,仅仅学习这一点,读者是无法欣赏的 Python 类使用多态特性的精髓。事实上,Python 在多态化的基础上,衍生出更灵活的编程机制。

继续重写上述程序:

classWhoSay:
defsay(self,who):
who.say()
classCLanguage:
defsay(self):
print("调用Clanguagesay方法")
classCPython(CLanguage):
defsay(self):
print("调用CPythonsay方法")
classCLinux(CLanguage):
defsay(self):
print("调用CLinuxsay方法")
a=WhoSay()
#调用CLanguagesay()方法
a.say(CLanguage())
#调用CPythonsay()方法
a.say(CPython())
#调用CLinuxsay()方法
a.say(CLinux())

程序执行结果如下:

调用Clanguagesay方法
调用CPythonsay方法
调用CLinuxsay方法

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

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

相关文章

如何让vim支持python3

如何让vim支持python3

2025-09-12
python2.7和3.6区别有哪些

python2.7和3.6区别有哪些

2025-09-12
python3有serial库吗

python3有serial库吗

2025-09-12
python中w、r表示什么意思

python中w、r表示什么意思

2025-09-12
python中如何把list变成字符串

python中如何把list变成字符串

2025-09-12
python命名空间是什么

python命名空间是什么

2025-09-12