Python 中的多态性

多态性是 OOP 的一个特征,这意味着一个名称可以具有不同的功能。 单个实体可以采取不同的形式。

本篇文章将介绍如何在 Python 中实现多态性。


Python 中的多态性

理解这一点的最佳方法是使用 len() 函数。 对于不同的对象,该函数有不同的解释。

对于列表,它将返回存在的总元素;对于字符串,它将返回存在的总字符。

代码:

python 复制代码
lst = ['fql', 'jiyik']
s = 'fqljiyik'
print(len(lst), len(s))

输出:

bash 复制代码
2 8

说明 Python 中多态性的另一个常见功能是 + 运算符。 该运算符可以在 Python 中执行两个数字之间的加法。

但是,当与字符串一起使用时,它充当连接运算符来组合两个字符串。

代码:

python 复制代码
a = 5 + 6
s = 'fql' + 'jiyik'
print(a, s)

输出:

bash 复制代码
11 fqljiyik

在 Python 中使用类方法实现多态性

Python 中的一切都是对象,并且属于某个类。 这些方法与类的对象相关联。

这就是为什么 + 运算符和 len() 函数对不同的对象执行不同的功能。 + 运算符调用为不同对象定义不同的魔术函数。

我们可以创建我们的类并实现这一目标。 两个类可以具有相同名称的函数,但具有不同的用途和不同的定义。

代码:

python 复制代码
class A:
    def fun(self):
        print("Class A")

class B:
    def fun(self):
        print("Class B")

ob1 = A()
ob2 = B()
for i in (ob1, ob2):
    i.fun()

输出:

bash 复制代码
Class A
Class B

在 Python 中使用方法重写实现多态性

Python 中的多态性也与类继承相关。 继承是指一个类访问另一个类的功能。

一个类及其子类可能包含同名的函数,我们可以在Python中使用函数重写。 使用方法重写,我们可以在子类中实现已经定义的方法。

我们可以根据子类重新定义函数。

代码:

python 复制代码
class A:
    def fun(self):
        print("Class A")

class B(A):
    def fun(self):
        print("Class B")

ob1 = A()
ob2 = B()
for i in (ob1, ob2):
    i.fun()

输出:

bash 复制代码
Class A
Class B

在上面的代码示例中,类 B 继承自类 A,但 fun() 方法在类 B 中被重写,并根据类进行定义。

我们还可以在重写函数中从 A 类访问函数 fun()

代码:

python 复制代码
class A:
    def fun(self):
        print("Class A")

class B(A):
    def fun(self):
        A.fun(self)
        print("Class B")

ob2 = B()
ob2.fun()

输出:

bash 复制代码
Class A
Class B

在 Python 中使用函数和运算符重载实现多态性

函数重载是实现多态性的一个有趣的功能。 Python 中没有此功能,Python 中将调用最近定义的函数。

Python 中可以重载运算符。 我们知道,不同的运算符可以根据对象类型执行不同的功能,使用 + 运算符可以清楚地看出。

发生这种情况是因为每当使用运算符时它都会在内部调用魔术函数。 例如,+ 运算符在内部调用 __add__ 方法。

这个神奇的函数在其名称前后都有双下划线。 魔法函数并不意味着直接调用,但我们可以为不同的类定义它们来修改不同运算符的行为。

代码:

python 复制代码
class A:
    def __init__(self, a):
        self.a = a

    def __add__(self, o):
        return self.a + o.a + 2

ob1 = A(5)
ob2 = A(4)
print(ob1+ob2)

输出:

bash 复制代码
11

在上面的例子中,我们通过修改A类的magic函数并将结果加2来重载 + 运算符。

相关推荐
阿里嘎多学长5 分钟前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
CHHH_HHH32 分钟前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
麻雀飞吧1 小时前
2026年AI量化开发,先跑通小流程再加复杂功能
人工智能·python
daphne odera�1 小时前
PyCharm 中 Codex 插件启动失败:unknown variant default 的解决方法
python·chatgpt·pycharm
nbu04william2 小时前
Deepseek-api省token的用法
python·大模型·token·deepseek
测试老哥2 小时前
Pytest自动化测试详解
自动化测试·软件测试·python·测试工具·测试用例·pytest·接口测试
坚持学习前端日记2 小时前
国产化适配全流程适配英伟达本地开发
人工智能·python
jimy12 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
源图客3 小时前
云途物流API开发-鉴权认证(Java)
java·网络·python
天外天-亮3 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus