最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中讓自定義的類使用加號(hào)"+"

 更新時(shí)間:2022年03月10日 09:44:04   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了python中讓自定義的類使用加號(hào)"+",如果對(duì)兩個(gè)對(duì)象直接“+”肯定是不行的,因?yàn)檫€沒有對(duì)CartoonImage類重載加法運(yùn)算符__add__(),下文小編舉例形式講解該內(nèi)容,需要的下伙伴可以參考一下

如果代碼是“1+1”,那么python控制臺(tái)必然輸出2,這很符合我們對(duì)“數(shù)值類”的認(rèn)識(shí),“+”運(yùn)算符必然能對(duì)數(shù)值進(jìn)行加法。

假設(shè)自己現(xiàn)在想設(shè)計(jì)一個(gè)稱為“動(dòng)漫圖片CartoonImage類”,能不能實(shí)現(xiàn)它的對(duì)象之間的“+”操作呢?比如想要對(duì)兩個(gè)動(dòng)漫圖像對(duì)象cartoon_1和cartoon_2使用“+”運(yùn)算符得到最右邊的圖像(也就是拼接功能):

如果對(duì)兩個(gè)對(duì)象直接“+”肯定是不行的,因?yàn)檫€沒有對(duì)CartoonImage類重載加法運(yùn)算符__add__(),比如下面的代碼是不行的:

# 1:創(chuàng)建對(duì)象
cartoon_1 = CartoonImage("data/left.jpg")
cartoon_2 = CartoonImage("data/right.jpg")
## 2:使用“+”進(jìn)行加法
concat_image = cartoon_1 + cartoon_2

本文將從以下兩個(gè)方面來(lái)討論如何對(duì)自定義類實(shí)現(xiàn)“+”法操作:

  • (1)python的魔法方法__add__()
  • (2)對(duì)CartoonImage重載“+”

對(duì)于減法、乘法等,分別對(duì)應(yīng)魔法方法__sub__()、__mul__()等,和加法的道理相同,只需要按照自己想要實(shí)現(xiàn)的功能進(jìn)行重載即可。

1、python的魔法方法__add__()

python中的“+”操作對(duì)應(yīng)其背后__add__()方法,比如自定義一個(gè)簡(jiǎn)單的類Fun,通過(guò)實(shí)現(xiàn)Fun類的__add__()方法就能使得Fun的對(duì)象支持“+”操作:

class A:
? ? def __add__(self, x):
? ? ? ? print("adding now!")
a1 = A()
a2 = A()?
a1 + a2

執(zhí)行上面的代碼控制臺(tái)就會(huì)顯示:“adding now!”,也就是說(shuō)“a1+a2”觸發(fā)了A類的__add__()方方法。在__add__()方法內(nèi)部,我們可以實(shí)現(xiàn)任何自己希望的功能,比如實(shí)現(xiàn)兩個(gè)對(duì)象某些屬性之間加法,或者是print一些控制信息。

2、對(duì)CartoonImage重載“+”

2.1 實(shí)現(xiàn)CartoonImage類

本節(jié)通過(guò)一個(gè)小例子,來(lái)具體的展示__add__()方法應(yīng)該如何使用,來(lái)實(shí)現(xiàn)更廣泛自定義功能。

首先是設(shè)計(jì)一個(gè)類,稱之為CartoonImage,它包含一個(gè)屬性image,我們使用self.image來(lái)存儲(chǔ)一張卡通圖片。

CartoonImage的初始化函數(shù)如下:

class CartoonImage():
? ? def __init__(self, image):
? ? ? ? """ 輸入如果是圖片的路徑(str類型)就去讀取圖片,
? ? ? ? 如果是圖片的數(shù)據(jù)值(ndarray類型)就直接初始化"""
? ? ? ? if isinstance(image, str):
? ? ? ? ? ? self.image = imageio.imread(image)[:, :, 0:3]
? ? ? ? elif isinstance(image, np.ndarray):
? ? ? ? ? ? self.image = image

初始化函數(shù)__init__()接收一個(gè)image的參數(shù),這個(gè)參數(shù)可以是字符串(表示圖片的路徑),也可以是數(shù)組(表示圖片的值)。需要初始化的只有一個(gè)屬性self.image,后面我們將對(duì)這個(gè)屬性進(jìn)行“+”。

對(duì)于__add__()魔法方法,其功能是什么完全取決于自己想要什么,而不是狹義上的加操作,比如自己想實(shí)現(xiàn)兩個(gè)圖片進(jìn)行“拼接”,這個(gè)拼接通過(guò)“+”來(lái)實(shí)現(xiàn),就可以在__add__()中做如下的實(shí)現(xiàn):

?def __add__(self, another_cartoon):
? ? ? ? """ 重載“+”,實(shí)現(xiàn)圖像拼接功能"""
? ? ? ? concat_image = np.concatenate((self.image, another_cartoon.image),axis=1)
? ? ? ? concat_cartoon = CartoonImage(concat_image)
? ? ? ? return concat_cartoon

3、測(cè)試“+”是否能實(shí)現(xiàn)圖像拼接

3.1對(duì)CartoonImage對(duì)象使用“+”操作

中已經(jīng)實(shí)現(xiàn)了__add__()方法,現(xiàn)在就能對(duì)CartoonImage對(duì)象使用“+”操作了,

代碼如下(文章開頭處的代碼):

# 1:創(chuàng)建對(duì)象
cartoon_1 = CartoonImage("data/left.jpg")
cartoon_2 = CartoonImage("data/right.jpg")
# 2:使用“+”進(jìn)行加法
concat_image = cartoon_1 + cartoon_2

現(xiàn)在就能實(shí)現(xiàn)一開始的拼接效果了:

再次重點(diǎn)指出“concat_image = cartoon_1 + cartoon_2”調(diào)用的是__add__(self, another_cartoon)函數(shù)。

到此這篇關(guān)于python中讓自定義的類使用加號(hào)"+"的文章就介紹到這了,更多相關(guān)python自定義類使用加號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm調(diào)用matplotlib繪圖時(shí)圖像彈出問(wèn)題詳解

    PyCharm調(diào)用matplotlib繪圖時(shí)圖像彈出問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于PyCharm調(diào)用matplotlib繪圖時(shí)圖像彈出問(wèn)題的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyCharm具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • python類型強(qiáng)制轉(zhuǎn)換long to int的代碼

    python類型強(qiáng)制轉(zhuǎn)換long to int的代碼

    python的int型最大值和系統(tǒng)有關(guān),32位和64位系統(tǒng)結(jié)果是不同的,分別為2的31次方減1和2的63次方減1,可以通過(guò)sys.maxint查看此值
    2013-02-02
  • python pydoc生成API文檔的實(shí)現(xiàn)

    python pydoc生成API文檔的實(shí)現(xiàn)

    pydoc?模塊會(huì)根據(jù) Python 模塊來(lái)自動(dòng)生成文檔,本文主要介紹了python pydoc生成API文檔的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列

    Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列

    本文主要介紹了Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python使用arrow庫(kù)優(yōu)雅地處理時(shí)間數(shù)據(jù)詳解

    Python使用arrow庫(kù)優(yōu)雅地處理時(shí)間數(shù)據(jù)詳解

    雖然Python提供了多個(gè)內(nèi)置模塊用于操作日期時(shí)間,但有的時(shí)候并不能滿足我們的需求,所以下面這篇文章主要給大家介紹了關(guān)于Python使用arrow庫(kù)如何優(yōu)雅地處理時(shí)間數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • python入門課程第五講之序列和字符串

    python入門課程第五講之序列和字符串

    這篇文章主要介紹了python入門課程第五講之序列和字符串,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a

    python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a

    在本篇文章里小編給大家整理了一篇關(guān)于python簡(jiǎn)單實(shí)現(xiàn)插入排序?qū)嵗a,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python實(shí)現(xiàn)計(jì)算機(jī)時(shí)長(zhǎng)管理程序

    Python實(shí)現(xiàn)計(jì)算機(jī)時(shí)長(zhǎng)管理程序

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個(gè)包含倒計(jì)時(shí),密碼驗(yàn)證,音頻控制,系統(tǒng)進(jìn)程監(jiān)控與終止等功能的程序,需要的可以了解下
    2025-02-02
  • Python數(shù)學(xué)建模PuLP庫(kù)線性規(guī)劃進(jìn)階基于字典詳解

    Python數(shù)學(xué)建模PuLP庫(kù)線性規(guī)劃進(jìn)階基于字典詳解

    在大規(guī)模的規(guī)劃問(wèn)題中,這樣逐個(gè)定義變量和設(shè)置模型參數(shù)非常繁瑣,效率很低。Pulp 庫(kù)提供了一種快捷方式,可以結(jié)合 Python語(yǔ)言的循環(huán)和容器,使用字典來(lái)創(chuàng)建問(wèn)題
    2021-10-10
  • python實(shí)現(xiàn)尼姆游戲

    python實(shí)現(xiàn)尼姆游戲

    這篇文章通過(guò)詳細(xì)的python代碼實(shí)現(xiàn)尼姆游戲,小編覺得挺不錯(cuò)的?,F(xiàn)在分享給大家,也給大家做個(gè)參考,需要的朋友可以收藏下。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12

最新評(píng)論

齐齐哈尔市| 乐山市| 衢州市| 临江市| 孝感市| 北流市| 青阳县| 大埔县| 浦北县| 黄石市| 尤溪县| 胶州市| 巨野县| 桂东县| 吉林市| 岫岩| 肃南| 新乡县| 金寨县| 葫芦岛市| 志丹县| 长寿区| 福建省| 竹北市| 小金县| 天镇县| 平乡县| 名山县| 扶沟县| 台安县| 汝南县| 洛浦县| 隆安县| 伊吾县| 商丘市| 育儿| 梧州市| 密云县| 揭东县| 台湾省| 阳东县|