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

python中讓自定義的類使用加號"+"

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

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

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

如果對兩個對象直接“+”肯定是不行的,因為還沒有對CartoonImage類重載加法運算符__add__(),比如下面的代碼是不行的:

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

本文將從以下兩個方面來討論如何對自定義類實現(xiàn)“+”法操作:

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

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

1、python的魔法方法__add__()

python中的“+”操作對應其背后__add__()方法,比如自定義一個簡單的類Fun,通過實現(xiàn)Fun類的__add__()方法就能使得Fun的對象支持“+”操作:

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

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

2、對CartoonImage重載“+”

2.1 實現(xiàn)CartoonImage類

本節(jié)通過一個小例子,來具體的展示__add__()方法應該如何使用,來實現(xiàn)更廣泛自定義功能。

首先是設計一個類,稱之為CartoonImage,它包含一個屬性image,我們使用self.image來存儲一張卡通圖片。

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__()接收一個image的參數(shù),這個參數(shù)可以是字符串(表示圖片的路徑),也可以是數(shù)組(表示圖片的值)。需要初始化的只有一個屬性self.image,后面我們將對這個屬性進行“+”。

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

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

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

3.1對CartoonImage對象使用“+”操作

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

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

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

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

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

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

相關文章

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

    PyCharm調(diào)用matplotlib繪圖時圖像彈出問題詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

    Python實現(xiàn)計算機時長管理程序

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

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

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

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

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

最新評論

潼关县| 遵化市| 察雅县| 廉江市| 醴陵市| 长子县| 南阳市| 雅安市| 建阳市| 项城市| 赤峰市| 南昌县| 普陀区| 会昌县| 新蔡县| 镶黄旗| 孝昌县| 巩义市| 武鸣县| 罗山县| 福安市| 贵阳市| 东兴市| 法库县| 东莞市| 黔西县| 商水县| 沙坪坝区| 金湖县| 西充县| 乌鲁木齐市| 黎川县| 华池县| 巴楚县| 乌鲁木齐县| 永州市| 四川省| 汉阴县| 安阳市| 福泉市| 灯塔市|