iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中让自定义的类使用加号"+"
  • 169
分享到

python中让自定义的类使用加号"+"

2024-04-02 19:04:59 169人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、python的魔法方法__add__()2、对CartoonImage重载“+”2.1 实现CartoonImage类3、测试“+&rdq

如果代码是“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

3、测试“+”是否能实现图像拼接

3.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自定义类使用加号内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中让自定义的类使用加号"+"

本文链接: https://www.lsjlt.com/news/141978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中让自定义的类使用加号"+"
    目录1、python的魔法方法__add__()2、对CartoonImage重载“+”2.1 实现CartoonImage类3、测试“+&rdq...
    99+
    2024-04-02
  • python如何使用f-string中的"="
    这篇文章主要介绍python如何使用f-string中的"=",文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!f-string 里"="的应用在...
    99+
    2024-04-02
  • python中如何使用自定义异常类
    本篇文章为大家展示了python中如何使用自定义异常类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自定义异常类自定义类继承系统的异常基类exception自定义异常类的构造函数等方法进行处理举例:...
    99+
    2023-06-20
  • 怎么在python中使用迭代器自定义类
    这篇文章将为大家详细讲解有关怎么在python中使用迭代器自定义类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和...
    99+
    2023-06-14
  • PHP8中如何使用Attributes为类添加自定义注解?
    PHP8中如何使用Attributes为类添加自定义注解?自定义注解是一种在类或方法上添加元数据的方式,它可以帮助我们在运行时获取和处理特定的类或方法上的附加信息。在PHP8中,引入了Attributes的概念,它使我们可以轻松地为类添加自...
    99+
    2023-10-22
    PHP Attributes
  • Python中类的定义和使用细讲
    文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言   在...
    99+
    2023-09-29
    python 面向对象编程 属性和方法
  • python PyQt5(自定义)信号与槽使用及说明
    目录1 定义信号2 定义槽函数3 连接信号与槽函数4 发射信号5 实例自定义参数的传递及实例lamdba表达式实例总结所谓PyQt5高级自定义信号与槽,指的就是我们可以以自己喜欢的方...
    99+
    2022-12-16
    python PyQt5 PyQt5信号 PyQt5槽使用
  • python在自定义类上使用堆排序的示例
    小编给大家分享一下python在自定义类上使用堆排序的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;...
    99+
    2023-06-14
  • 怎么在python中使用namedtuple定义类
    这篇文章给大家介绍怎么在python中使用namedtuple定义类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言...
    99+
    2023-06-14
  • Java中的BaseTypeHandler自定义类型转换器的使用
    目录简述通用的类型转换器(存在一些问题)定制类型转换器简述 mysq5.7之后新增了json类型,但是在使用的过程中,Json数组中的值小于Integer.MAX_VALUE,则反序...
    99+
    2024-04-02
  • Python类的定义和使用详情
    目录一、前言二、定义类三、创建类的实例四、“魔术”方法——_ init _()五、创建类的成员并访问1.创建实例方法并访问2.创建数据...
    99+
    2024-04-02
  • 自定义的PHPRedis操作类使用介绍
    在《Redis协议详解》这篇文章中,介绍了Redis协议的内部情况。接着用了一些时间,用PHP封装了一个Redis的操作类,功能虽说比不上专业的PHPRedis这类PHP的第三方扩展强大,但是对于理解R...
    99+
    2024-02-27
  • 使用自定义类型解析 golang 中的 JSON 数组
    php小编百草为你带来了一篇关于解析golang中的JSON数组的文章。在golang中,我们可以使用自定义类型来解析复杂的JSON数组。这种方法不仅能够更好地理解和处理JSON数据,...
    99+
    2024-02-09
    json数组
  • python调用mysql中的自定义fu
    首先在Mysql中创立一个叫ForeignKeyTest的function,链接如下:http://mp.blog.csdn.net/postedit/79452914然后新开一个sublime,python代码如下:# -*- codi...
    99+
    2023-01-31
    自定义 python mysql
  • Python中怎么使用Import自定义模块
    这篇文章给大家介绍Python中怎么使用Import自定义模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体步骤首先找到当前编辑器(可能会存在多个python解析器)对应的第三方库的安装路径,如果不知道具体的位置,...
    99+
    2023-06-15
  • 如何在 Golang 中使用自定义错误类型?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • Java中的BaseTypeHandler自定义类型转换器如何使用
    这篇文章主要介绍“Java中的BaseTypeHandler自定义类型转换器如何使用”,在日常操作中,相信很多人在Java中的BaseTypeHandler自定义类型转换器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-30
  • 怎么在python中利用namedtuple自定义数据类型
    怎么在python中利用namedtuple自定义数据类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python可以做什么Python是一种编程语言,内置了许多有效的工...
    99+
    2023-06-14
  • 如何在python中使用__slots__定义类属性
    本篇文章给大家分享的是有关如何在python中使用__slots__定义类属性,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python是什么意思Python是一种跨平台的、具...
    99+
    2023-06-14
  • Python自定义模块的创建与使用
    目录一、前言二、模块的概述三、自定义模块1.创建模块2.使用import语句导入模块3.使用from…import语句导入模块附:python打包用户自定义模块总结一、...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作