Python:__eq__和__str__函式的使用示例
一.__eq__方法
在我們定義一個類的時候,常常想對一個類所例項化出來的兩個物件進行判斷這兩個物件是否是完全相同的。一般情況下,我們認為如果同一個類例項化出來的兩個物件的屬性全都是一樣的話,那麼這兩個物件是相同的。但是如果我們直接用"==”來判斷這兩個物件知否相等,那麼結果一定是不相等的,因為這兩個物件的地址一定不同,它們在記憶體當中的不同區域,比如我們有程式碼:
class Item: def __init__(self,name,weight): self.name=name self.weight=weight cat_1 = Item('Cat',5) cat_2 = Item('Cat',5) print(cat_1 == cat_2)
這段程式碼當中,我們建立了兩個“item”物件,它們的屬性“name”和“weight”都完全一致,這段程式看似正確,應該打印出True,但實際上輸出是:
False
原因則是因為這兩個物件的地址是不同的,那麼怎麼才能夠讓它們只要屬性相同兩個物件就相等呢?那就是利用__eq__方法來進行判斷,這個方法預設有兩個引數,一個是self,另一個是other.也就是用自身的屬性和other物件的屬性分別進行比較,如果比對成功則返回True,失敗則返回False。你也可以自定義想要比較的屬性有哪些,也不一定是全部的屬性都一樣才相等。我們有程式碼:
class Item: def __init__(self,weight): self.name=name self.weight=weight def __eq__(self,other): # `__eq__` is an instance method,which also accepts # one other object as an argument. if type(other)==type(self) and other.name==self.name and other.weight==self.weight: return True else: return False# 返回False這一步也是需要寫的哈,不然判斷失敗就沒有返回值了 cat_1 = Item('Cat',5) print(cat_1.__eq__(cat_2)) # should evaluate to True print(cat_1 == cat_2) # should also evaluate to True
這樣,就會打印出兩個True了。
二.__str__方法
我們如果把自己建立的物件直接打印出來,那麼一般是這樣,比如我們有程式碼:
print(cat_1)
輸出:
<__main__.Item object at 0x7f8e3d99f190
這是一個看起來十分難看的輸出,輸出的是這物件的類別和地址。但我們可以把這個輸出改成自己想要的樣子,那就是利用__str__方法。我們重寫這個方法,讓這個返回一個值,那麼最後輸出的就是我們的返回值,如下所示:
class Item: def __init__(self,other): if type(other)==type(self) and other.name==self.name and other.weight==self.weight: return True else: return False def __str__(self): return 'the name of this cat is {}'.format(self.name)
再次建立並列印:
cat_1 = Item('Cat',5) print(cat_1) print(cat_2)
可得到輸出:
the name of this cat is Cat
the name of this cat is Cat
這樣這個輸出看起來就不會有那麼麻煩了,自定義的輸出果然清晰了不少啊!
以上就是Python:__eq__和__str__函式的使用示例的詳細內容,更多關於Python __eq__和__str__函式的資料請關注我們其它相關文章!