首頁  >  文章  >  後端開發  >  如何在Python類別中實現優雅的相等比較?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 08:44:01423瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn