本文目錄一覽:
python 重載方法有哪些特點
說起python重載,大家學過其他的語言比如說C#語言的話,應該知道有方法重載和運算符重載的概念,但是python重載的話,有它自己的特殊性,下面我說說自己的一點看法,希望大家踴躍拍磚。python 的重載主要包括方法重載和運算符重載。1.python 方法重載: 其他的語言一般對於方法重載的話,主要是根據參數的類型不同或者是數量不同來區分同名的方法。而python則比較特殊,它本身是動態語言,方法的參數是沒有類型的,當調用傳值的時候才確定參數的類型,故對參數類型不同的方法無需考慮重載。對參數數量不同的方法,則(大多數情況下)可以採用參數默認值來實現。比如你可以定義函數的默認值:def info(x,y,z=1): pass2.python 運算符重載: 在C#中,我們通過使用關鍵字operator定義一個運算符方法,並定義與所在類相關的運算符行為。在 Python中,運算符重載的方式更為簡單——每一個類都默認內置了所有可能的運算符方法,只要重寫這個方法,就可以實現針對該運算符的重載。例如以下是重載加法操作:class Info(object): def __init__(self): self.a = 11 self.b = 22 def __add__(self,x): return self.a * self.b上面的例子是重寫了+操作符號,你也可以重載其他的運算符。比如你可以重載乘號運算符,感興趣的話,可以自己寫寫代碼。希望上面講的2點能夠讓你對python重載有個簡單的認識。有興趣的可以關注下。
Python正確重載運算符的方法示例詳解
Python正確重載運算符的方法示例詳解
說到運算符重載相信大家都不陌生,運算符重載的作用是讓用戶定義的對象使用中綴運算符(如 + 和 |)或一元運算符(如 – 和 ~)。說得寬泛一些,在 Python 中,函數調用(())、屬性訪問(.)和元素訪問 / 切片([])也是運算符。
我們為 Vector 類簡略實現了幾個運算符。__add__ 和 __mul__ 方法是為了展示如何使用特殊方法重載運算符,不過有些小問題被我們忽視了。此外,我們定義的Vector2d.__eq__ 方法認為 Vector(3, 4) == [3, 4] 是真的(True),這可能並不合理。下面來一起看看詳細的介紹吧。
運算符重載基礎
在某些圈子中,運算符重載的名聲並不好。這個語言特性可能(已經)被濫用,讓程序員困惑,導致缺陷和意料之外的性能瓶頸。但是,如果使用得當,API 會變得好用,代碼會變得易於閱讀。Python 施加了一些限制,做好了靈活性、可用性和安全性方面的平衡:
不能重載內置類型的運算符
不能新建運算符,只能重載現有的
某些運算符不能重載——is、and、or 和 not(不過位運算符
、| 和 ~ 可以)
前面的博文已經為 Vector 定義了一個中綴運算符,即 ==,這個運算符由__eq__ 方法支持。我們將改進 __eq__ 方法的實現,更好地處理不是Vector 實例的操作數。然而,在運算符重載方面,眾多比較運算符(==、!=、、、=、=)是特例,因此我們首先將在 Vector 中重載四個算術運算符:一元運算符 – 和 +,以及中綴運算符 + 和 *。
一元運算符
-(__neg__)
一元取負算術運算符。如果 x 是 -2,那麼 -x == 2。
+(__pos__)
一元取正算術運算符。通常,x == +x,但也有一些例外。如果好奇,請閱讀“x 和 +x 何時不相等”附註欄。
~(__invert__)
對整數按位取反,定義為 ~x == -(x+1)。如果 x 是 2,那麼 ~x== -3。
支持一元運算符很簡單,只需實現相應的特殊方法。這些特殊方法只有一個參數,self。然後,使用符合所在類的邏輯實現。不過,要遵守運算符的一個基本規則:始終返回一個新對象。也就是說,不能修改self,要創建並返回合適類型的新實例。
對 – 和 + 來說,結果可能是與 self 同屬一類的實例。多數時候,+ 最好返回 self 的副本。abs(…) 的結果應該是一個標量。但是對 ~ 來說,很難說什麼結果是合理的,因為可能不是處理整數的位,例如在ORM 中,SQL WHERE 子句應該返回反集。
def __abs__(self):
return math.sqrt(sum(x * x for x in self))
def __neg__(self):
return Vector(-x for x in self) #為了計算 -v,構建一個新 Vector 實例,把 self 的每個分量都取反
def __pos__(self):
return Vector(self) #為了計算 +v,構建一個新 Vector 實例,傳入 self 的各個分量
x 和 +x 何時不相等
每個人都覺得 x == +x,而且在 Python 中,幾乎所有情況下都是這樣。但是,我在標準庫中找到兩例 x != +x 的情況。
第一例與 decimal.Decimal 類有關。如果 x 是 Decimal 實例,在算術運算的上下文中創建,然後在不同的上下文中計算 +x,那麼 x!= +x。例如,x 所在的上下文使用某個精度,而計算 +x 時,精度變了,例如下面的
怎麼理解Python中重載?通俗理解是
python裡面沒有重載吧?
正常的重載說的應該是函數方法的重載,即兩個函數的名稱相同但是參數不同是重載,會出現重載的情況一般是函數實現相同功能時,遇到參數類型可能不同的情況,會出現重載,如比較常見的對於加法的實現,如果輸入兩個整數相加則直接使用整數加法,如果兩個字符串相加則使用字符串的拼接。輸入的參數類型不同,其實是兩個不同的函數,這在那種強類型語言中是可以利用函數重載來實現的,而python中函數類型是動態的各種各樣的,所以不需要重載這個機制。相同函數名就是表示同一個方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/247981.html