在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自定义类型,支持比较运算的实现。
感谢您的拨冗阅读,希望对您有所帮助!