亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

假設自己現在想設計一個稱為“動漫圖片CartoonImage類”,能不能實現它的對象之間的“+”操作呢?比如想要對兩個動漫圖像對象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

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

  • (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

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

2、對CartoonImage重載“+”

2.1 實現CartoonImage類

本節(jié)通過一個小例子,來具體的展示__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:創(chuàng)建對象
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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談keras中的后端backend及其相關函數(K.prod,K.cast)

    淺談keras中的后端backend及其相關函數(K.prod,K.cast)

    這篇文章主要介紹了淺談keras中的后端backend及其相關函數(K.prod,K.cast),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python正則表達式面試題解答

    python正則表達式面試題解答

    這篇文章主要為大家分析了python正則表達式常見面試題,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python2.7使用plotly繪制本地散點圖和折線圖

    python2.7使用plotly繪制本地散點圖和折線圖

    這篇文章主要為大家詳細介紹了python2.7使用plotly繪制本地散點圖和折線圖實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python實現數據庫跨服務器遷移

    python實現數據庫跨服務器遷移

    這篇文章主要為大家詳細介紹了Python實現數據庫之間的數據遷移,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python教程之基本運算符的使用(下)

    Python教程之基本運算符的使用(下)

    Python運算符通常用于對值和變量執(zhí)行操作。這些是用于邏輯和算術運算的標準符號。在本文中,我們將研究運算符的優(yōu)先級和關聯性,感興趣的可以了解一下
    2022-09-09
  • 詳解Python的條件語句

    詳解Python的條件語句

    這篇文章主要為大家介紹了Python的條件語句,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 一篇不錯的Python入門教程

    一篇不錯的Python入門教程

    一篇不錯的Python入門教程...
    2007-02-02
  • Python中多線程thread與threading的實現方法

    Python中多線程thread與threading的實現方法

    這篇文章主要介紹了Python中多線程thread與threading的實現方法,很重要的應用,需要的朋友可以參考下
    2014-08-08
  • python數據結構之棧、隊列及雙端隊列

    python數據結構之棧、隊列及雙端隊列

    在上一章的學習中,我們主要學習了怎么去衡量一個算法的好壞,比較常見的方式是使用大O記法,就是所謂的時間復雜度,這一章節(jié)我來學習基本的數據結構,如棧、隊列和雙端隊列等等。感興趣的小伙伴可以參考一下
    2021-12-12
  • Django 緩存配置Redis使用詳解

    Django 緩存配置Redis使用詳解

    這篇文章主要介紹了Django 緩存配置Redis使用詳解,緩存是將一些常用的數據保存內存或者memcache中,在一定的時間內有用戶來訪問這些數據時,則不再去執(zhí)行數據庫及渲染等操作,而是直接從內存或memcache的緩存中去取得數據,然后返回給用戶
    2019-07-07

最新評論