83、Python之鸭子类型:比较运算符重载&自定义类型实现比较运算

南宫理的日志录 2024-11-08 09:29:30
引言

在Python中的鸭子类型理念,以及魔法函数(或者称之为魔术方法)系统的加持下,开发者自定义的类型可以拥有任何内置类型的特性,出现在几乎任何想要出入的语法单元,表现得完全像内置类型一样。

所以,有一种说法,所谓的“魔术方法”,更应该称之为“麻瓜方法”。我们每个开发者,不需要具备Python解释器或者内置模块的魔法,就可以实现内置模块的行为、特性。

本文接着就鸭子类型进行展开,来聊一下比较运算的支持。

本文的主要内容有:

1、比较运算符概览

2、比较运算符重载

3、通过魔术方法实现比较运算

比较运算符概览

先说点题外话。

计算机科学是以数学为其理论基础的,早期的编程语言也是很纯粹地为了解决一些数学问题。即便计算机科学发展了这么多年,各种编程语言、新的技术层出不穷,计算机所能解决的问题看似覆盖了各个领域,其本质始终没有突破。也就是说,计算机所能解决的各种问题,本质上都是先转换成了数学问题或者数学形式语言的表达,才能最终通过计算机来解决。

数学领域中,一个关键特性在于可量化。在可量化的基础上有了计算的基石——四则运算,然后组合出了各种复杂的运算。

除了四则运算,可量化还带来了可比较的特性,继而有了各种比较运算。

今天,我们先来聊下比较运算。

任何编程语言,都会有对比较运算的支持,而且形式也都是大同小异。常见的比较运算是基于大于、小于、等于的组合实现,主要有:

1、相等运算,通常是==,英文为eq,equal的缩写。

2、不相等运算,通常为!=,也有<>的形式,英文为ne,not equal的缩写。

3、小于运算,通常为<,英文为lt,little than的缩写。

4、小于等于运算,通常为<=,英文为le,little or equal的缩写。

5、大于运算,通常为>,英文为gt,great than的缩写。

6、大于等于运算,通常为>=,英文为ge,great or equal的缩写。

比较运算符重载

在编程语言中,各种基本类型是自动支持运算比较的,比如整型、浮点型,字符串类型通常也是可以比较的。

但是,我们自定义的类型,默认情况下,是无法支持比较运算的。

执行结果:

当然,在一些编程语言中,也提供了自定义类型支持比较运算符的方法,比如:C++。这种方法,通常叫做运算符重载。

所谓“运算符重载(Operator Overloading)”,是面向对象编程的一种技术,允许开发者定义或者改变运算符在自定义对象上的行为。通过运算符重载,可以使得自定义类的实例与内置数据类型一样使用运算符,从而使得代码更加直观、易读。

Python中虽然不提供C++中类似的运算符重载的功能实现,但是通过魔术方法,使得自定义类型支持运算符操作,能够更加简洁、直观。

通过魔术方法实现比较运算

Python中针对每一种比较运算符,都有对应的魔术方法,下面简单列举一下:

1、__eq__(self, other):相等运算,==。

2、__ne__(self, other):不相等运算,!=。

3、__lt__(self, other):小于运算,<。

4、__le__(self, ohter):小于等于运算,<=。

5、__gt__(self, other):大于运算,>。

6、__ge__(self, other):大于等于运算,>=。

下面,通过代码实例看一下这些魔术方法的作用。

运行结果:

总结

本文简单介绍了编程中的比较运算,以及运算符重载的概念。然后,结合Python中的魔术方法,介绍了Python自定义类型,支持比较运算的实现。

感谢您的拨冗阅读,希望对您有所帮助!

0 阅读:1

南宫理的日志录

简介:深耕IT科技,探索技术与人文的交集