如何在Python類別中實現優雅的相等比較?

Mary-Kate Olsen
發布: 2024-11-08 08:44:01
原創
493 人瀏覽過

How to Achieve Elegant Equality Comparisons in Python Classes?

在Python 類別中支援相等(「等價」)的優雅方法

在物件導向程式設計中,定義自訂類別的物件之間的相等檢查通常至關重要。 Python 透過實作特殊方法 eq 和 __ne__ 來實現這一點,分別用於等價和不等式比較。

一個既定方法是比較dict 屬性兩個物件:

class Foo:
    def __init__(self, item):
        self.item = item

    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False
登入後複製

但是,請考慮以下更簡單的方法:

class Number:

    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return isinstance(other, Number) and self.number == other.number
登入後複製

這種簡潔的方法消除了複雜的dict 比較的需要,使其成為一種優雅的方法

此外,它無縫地處理子類化,確保可交換且一致的等式檢查:

class SubNumber(Number):
    pass

n1 = Number(1)
n2 = Number(1)
n3 = SubNumber(1)
n4 = SubNumber(4)

print(n1 == n2) # True
print(n2 == n1) # True
print(n1 == n3) # True
print(n1 != n4) # True
print(len(set([n1, n2, n3])))  # 1
登入後複製

要完成解決方案,必須重寫hash 方法一致的雜湊和唯一標識:

class Number:

    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return isinstance(other, Number) and self.number == other.number

    def __hash__(self):
        return hash(self.number)
登入後複製

這解決了使用dict 進行相等比較時遇到的雜湊問題,確保可靠的集合行為和不同物件的唯一識別。

以上是如何在Python類別中實現優雅的相等比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板