目录
1、python的魔法方法__add__()2、对CartoonImage重载“+”2.1实现CartoonImage类2、测试“+”是否能实现图像拼接2.1对CartoonImage对象使用“+”操作如果代码是“1+1”,那么python控制台必然输出2,这很符合我们对“数值类”的认识,“+”运算符必然能对数值进行加法。
假设自己现在想设计一个称为“动漫图片CartoonImage类”,能不能实现它的对象之间的“+”操作呢?比如想要对两个动漫图像对象cartoon_1和cartoon_2使用“+”运算符得到最右边的图像(也就是拼接功能):
如果对两个对象直接“+”肯定是不行的,因为还没有对CartoonImage类重载加法运算符__add__(),比如下面的代码是不行的:
# 1:创建对象 cartoon_1 = CartoonImage("data/left.jpg") cartoon_2 = CartoonImage("data/right.jpg") ## 2:使用“+”进行加法 concat_image = cartoon_1 + cartoon_2
本文将从以下两个方面来讨论如何对自定义类实现“+”法操作:
(1)python的魔法方法__add__()(2)对CartoonImage重载“+”对于减法、乘法等,分别对应魔法方法__sub__()、__mul__()等,和加法的道理相同,只需要按照自己想要实现的功能进行重载即可。
1、python的魔法方法__add__()
python中的“+”操作对应其背后__add__()
方法,比如自定义一个简单的类Fun,通过实现Fun类的__add__()方法就能使得Fun的对象支持“+”操作:
class A: def __add__(self, x): print("adding now!") a1 = A() a2 = A() a1 + a2
执行上面的代码控制台就会显示:“adding now!”,也就是说“a1+a2”触发了A类的__add__()方方法。在__add__()方法内部,我们可以实现任何自己希望的功能,比如实现两个对象某些属性之间加法,或者是print一些控制信息。
2、对CartoonImage重载“+”
2.1 实现CartoonImage类
本节通过一个小例子,来具体的展示__add__()
方法应该如何使用,来实现更广泛自定义功能。
首先是设计一个类,称之为CartoonImage
,它包含一个属性image,我们使用self.image来存储一张卡通图片。
CartoonImage的初始化函数如下:
class CartoonImage(): def __init__(self, image): """ 输入如果是图片的路径(str类型)就去读取图片, 如果是图片的数据值(ndarray类型)就直接初始化""" if isinstance(image, str): self.image = imageio.imread(image)[:, :, 0:3] elif isinstance(image, np.ndarray): self.image = image
初始化函数__init__()接收一个image
的参数,这个参数可以是字符串(表示图片的路径),也可以是数组(表示图片的值)。需要初始化的只有一个属性self.image
,后面我们将对这个属性进行“+”。
对于__add__()魔法方法,其功能是什么完全取决于自己想要什么,而不是狭义上的加操作,比如自己想实现两个图片进行“拼接”,这个拼接通过“+”来实现,就可以在__add__()中做如下的实现:
def __add__(self, another_cartoon): """ 重载“+”,实现图像拼接功能""" concat_image = np.concatenate((self.image, another_cartoon.image),axis=1) concat_cartoon = CartoonImage(concat_image) return concat_cartoon
2、测试“+”是否能实现图像拼接
2.1对CartoonImage对象使用“+”操作
中已经实现了__add__()方法,现在就能对CartoonImage
对象使用“+”操作了,
代码如下(文章开头处的代码):
# 1:创建对象 cartoon_1 = CartoonImage("data/left.jpg") cartoon_2 = CartoonImage("data/right.jpg") # 2:使用“+”进行加法 concat_image = cartoon_1 + cartoon_2
现在就能实现一开始的拼接效果了:
再次重点指出“concat_image = cartoon_1 + cartoon_2”调用的是__add__(self, another_cartoon)函数。
到此这篇关于python中让自定义的类使用加号"+"的文章就介绍到这了,更多相关python自定义类使用加号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?