【Python】面向对象的运算符重载

  面向对象的编程中可以对运算符进行重载,使运算符可以对该类的实例进行操作。

重载方法的一般格式如下:

1 def __运算符名__(self, other):
2   运算符语句

比较常用的运算符重载有三类:二元算术运算符重载、反向算术运算符重载、比较运算符重载、一元运算符重载

1 二元算术运算符的重载:
2 方法名                  运算符和表达式      说明
3 __add__(self,rhs)        self + rhs      加法
4 __sub__(self,rhs)        self - rhs      减法
5 __mul__(self,rhs)        self * rhs      乘法
6 __truediv__(self,rhs)   self / rhs       除法
7 __floordiv__(self,rhs)  self //rhs       整除
8 __mod__(self,rhs)       self % rhs       取模
9 __pow__(self,rhs)       self **rhs       幂运算*rhs的含义是right hand side
1 反向算术运算符的重载:  当运算符的左侧为Python的内建数据类型(如:int、float等),右侧为自定义的对象类型时就需要对运算符进行反向重载。
2  方法名                  运算符和表达式       说明
3 __radd__(self,lhs)       lhs + self        加法
4 __rsub__(self,lhs)       lhs - self        减法
5 __rmul__(self,lhs)       lhs * self        乘法
6 __rtruediv__(self,lhs)   lhs / self        除法
7 __rfloordiv__(self,lhs)  lhs // self       整除
8 __rmod__(self,lhs)       lhs % self        取模
9 __rpow__(self,lhs)       lhs ** self       幂运算*lhs的含义是left hand side*可见反向算术运算符的符号名就是普通运算符加上r(reverse)
1 比较算术运算符的重载:
2 方法名                  运算符和表达式      说明
3 __lt__(self,rhs)       self < rhs        小于
4 __le__(self,rhs)       self <= rhs       小于等于
5 __gt__(self,rhs)       self > rhs        大于
6 __ge__(self,rhs)       self >= rhs       大于等于
7 __eq__(self,rhs)       self == rhs       等于
8 __ne__(self,rhs)       self != rhs       不等于
1 一元运算符的重载
2 方法名              运算符和表达式        说明
3 __neg__(self)         - self           负号
4 __pos__(self)         + self           正号
5 __invert__(self)      ~ self           取反
 1 例:    以分数类为例对运算符进行重载。
 2 class Fraction:  # 分数类
 3     def __init__(self, num, deno):
 4         if deno < 0:
 5             deno = -1 * deno
 6             num = -1 * num
 7         h = hcf(num, deno)
 8         self.num = int(num/h)
 9         self.deno = int(deno/h)
10
11     def __add__(self, other):  # 加法
12         temp_lcm = lcm(self.deno, other.deno)
13         num = self.num*(temp_lcm/self.deno)+other.num*(temp_lcm/other.deno)
14         deno = temp_lcm
15         return Fraction(num, deno)
16
17     def __sub__(self, other):  # 减法
18         temp_lcm = lcm(self.deno, other.deno)
19         num = self.num * (temp_lcm / self.deno) - other.num * (temp_lcm / other.deno)
20         deno = temp_lcm
21         return Fraction(num, deno)
22
23     def __mul__(self, other):  # 乘法
24         return Fraction(self.num*other.num, self.deno*other.deno)
25
26     def __truediv__(self, other):  # 除法
27         return Fraction(self.num*other.deno, self.deno*other.num)
28
29     def __rtruediv__(self, lhs):  # 反向运算符重载
30         return Fraction(lhs*self.deno, self.num)
31
32     def reverse(self):  # 取倒数
33         return Fraction(self.deno, self.num)
34
35     def prtfloat(self):  # 以浮点数形式输出
36         print(format(self.num/self.deno, ‘.1f‘))
37
38     def prt(self):  # 以分数形式输出
39         print(‘{}/{}‘.format(self.num, self.deno))

参考链接:

https://blog.csdn.net/zhangshuaijun123/article/details/82149056

原文地址:https://www.cnblogs.com/protectione055/p/11816759.html

时间: 2024-08-28 03:34:43

【Python】面向对象的运算符重载的相关文章

Python 3 之 运算符重载详解

基础知识 实际上,"运算符重载"只是意味着在类方法中拦截内置的操作--当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果.以下是对重载的关键概念的复习: 运算符重载让类拦截常规的Python运算. 类可重载所有Python表达式运算符 类可以重载打印.函数调用.属性点号运算等内置运算 重载使类实例的行为像内置类型. 重载是通过特殊名称的类方法来实现的. 换句话说,当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Pyt

Python 面向对象class(2)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

Python 面向对象-------补充

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

Python 面向对象详解

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共

Python 面向对象编程(转)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

Python - 面向对象 - 第二十天

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

Python面向对象运算符重载

运算符重载的概念如下: 运算符重载让类拦截常规的Python运算: 类可重载所有Python表达式运算符: 类也可重载打印.函数调用.属性点号运算等内置运算: 重载是类实例的行为想内置类型: 重载是通过提供特殊名称的类方法来实现的: 常见的运算符重载方法 方法 重载 调用 __init__ 构造函数 对象建立:X = Class(args) __del__ 解析函数 X对象收回 __add__ 运算符+ 如果没有__iadd__,X+Y,X+=Y __or__ 运算符或 如果没有__ior__

7Python全栈之路系列之面向对象运算符重载

Python全栈之路系列之面向对象运算符重载 运算符重载的概念如下: 运算符重载让类拦截常规的Python运算: 类可重载所有Python表达式运算符: 类也可重载打印.函数调用.属性点号运算等内置运算: 重载是类实例的行为想内置类型: 重载是通过提供特殊名称的类方法来实现的: 常见的运算符重载方法 方法 重载 调用 __init__ 构造函数 对象建立:X = Class(args) __del__ 解析函数 X对象收回 __add__ 运算符+ 如果没有__iadd__,X+Y,X+=Y _

Python运算符重载

运算符重载是指在方法(双下划线的特殊方法)中拦截内置的操作--当类的实例出现在内置操作中,Python会自动调用自定义的方法,并且返回自定义方法的操作结果. 可以让类拦截常规的Python运算. 可调用对象:__call__() 函数:内置函数.自定义函数.def.lambda 类 类方法 函数的属性: __doc__ __name__ __dict__ __code__ __globals__ 方法的属性: __doc__ __name__ __func__ __class__ __self_