首页 > 其他分享 >add魔术方法对象重写加法运算符

add魔术方法对象重写加法运算符

时间:2024-03-17 15:00:57浏览次数:16  
标签:__ num res self 运算符 add other 重写

对象重载add魔术方法

#__add__ 魔术方法  (与之相关的__radd__ 反向加法)
'''
	触发时机:使用对象进行运算相加的时候自动触发
	功能:对象运算
	参数:二个对象参数
	返回值:运算后的值
'''

'''
类似的还有如下等等(了解):
	__sub__(self, other)           定义减法的行为:-
	__mul__(self, other)           定义乘法的行为:
	__truediv__(self, other)       定义真除法的行为:/
	...
	...
'''

class MyClass():
	def __init__(self,num):
		self.num = num
		
	# 当对象在 + 号的左侧时,自动触发
	def __add__(self,other):
		# print(self)
		# print(other)
		return self.num * 3 + other
		
	def __radd__(self,other):
		# print(self)  # 对象
		# print(other) # 7
		return self.num * 5 + other
		
# add的触发方式
a = MyClass(3)
res = a + 1
print(res)

# radd的触发方式
b = MyClass(5)
res = 7 + b
print(res)

# 对象 + 对象
res = a + b
print(res)

"""
a+b 触发的是add魔术方法  self 接受的是a   other 接受的是b
return a.num + b  => return 9 + b
res =  9 + b   触发的是radd魔术方法  self 接受的是b   other 接受的是9
return b.num * 5 + 9  => 5 * 5 + 9 => 34
"""

标签:__,num,res,self,运算符,add,other,重写
From: https://www.cnblogs.com/wbcde116/p/18078593

相关文章

  • 重写len函数对象魔术方法
    ###len魔术方法'''触发时机:使用len(对象)的时候自动触发功能:用于检测对象中或者类中某个内容的个数参数:一个self接受当前对象返回值:必须返回整型'''len(对象)=>类中的所有自定义成员classMyClass():pty1=1pty2=2__pty3=3deffunc1(): passdeffunc2(): ......
  • AI回答记录:python中有重载与重写的概念吗?
    问:python中有重载与重写的概念吗?GPT4-turbo:在Python中,严格来说没有像其他一些编程语言(如Java、C++)那样的重载(Overloading)机制,但是可以通过其他方式实现类似的功能。Python中有重写(Overriding)的概念。重载(Overloading):Python不支持传统的方法重载,即在同一个类中定义多个同名......
  • Python中有重写和重载的方法吗?
    问1:Python中有重写和重载的方法吗?先说结论:Python因为语言的特性,没有重载,但是有重写的方法。问2:什么是重写?1.先看代码:classCalculator:defadd(self,a,b):print("我执行了吗?")returna+b+100defadd(self,a,b):returnflo......
  • 【机械臂路径规划】基于ADD-RRT、RRV、改进的Bridge Test等算法实现固定基座机械臂路
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 实验1 C语言开发环境使用和数据类型,运算符,表达式
    #include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");return0;}#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");print......
  • 滴水逆向笔记系列-c++总结3-39.模板-40.引用_友元_运算符重载
    第三十八课c++6模板1.冒泡排序和折半查找voidSort(int*arr,intnLength) { inti; intk; for(i=0;i<nLength-1;i++) { for(k=0;k<nLength-1-i;k++) { if(arr[k]>arr[k+1]) { inttemp=arr[k]; a......
  • 实验 1 C语言开发实验环境和数据类型、运算符、表达式
     ......
  • paddleocr 在docker环境下部署
    paddleocr在docker环境下部署第一步查看cuda的版本nvcc-V,我的是11.2;nvidia-smi对应的cudaversion是11.6,所以采用了registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.6-cudnn8.4-trt8.4-gcc82作为基础镜像Docker镜像源选择,DockerHub地址Dockerfile......
  • Linux - 报错“Address already in use”解决方案
    报"Addressalreadyinuse",如下图所示:错误原因:某程序正在使用端口。(这里我使用的是端口“8888”)可以通过命令查看所有正在使用的端口:netstat-tunllp 解决方案1.找到占用该端口的进程号使用命令:sudonetstat-anp|grep"8888"(端口号)可以看到进程号为8888的serv......
  • 一点奇怪的想法——paddleocr复现使用
    三个命令行安装paddleocrcondacreate-npaddle02python=3.8activetepaddle02pipinstallpaddlepaddle-ihttps://mirror.baidu.com/pypi/simplepipinstallpaddleocr-ihttps://mirror.baidu.com/pypi/simple大部分的应该是可以跑的测试代码#第一个简单测试的......