簡體   English   中英

'super'對象沒有屬性'__eq__'

[英]'super' object has no attribute '__eq__'

當我嘗試覆蓋魔術方法__eq__ ,並使用super訪問object找到的基本方法時,我收到一個錯誤。 這不是一個錯誤,但它確實感覺像一個:

class A(object):
    def __eq__(self, other):
        return super(A, self).__eq__(other)
A() == 0

# raises AttributeError: 'super' object has no attribute '__eq__'

這是不直觀的,因為object.__eq__存在,但是對於class A(object): pass它沒有。 如果我沒有記錯__eq__度假村一個is檢查,這樣可以在這里是解決辦法,但使用is不是super不混入友好。 在我的情況下,這條路線是可以的,但在其他情況下可能不是。

有關__eq__為何如此工作的任何建議或信息都會很棒。

正如Will的回答所述, object()實際上並沒有為實例實現__eq__ (在python 2.7中)。

你被object.__eq__存在而被欺騙,因為它必須是一種檢查對象實例是否相等的方法

相反, object.__eq__實際上是一個繼承自type的類方法,用於檢查類型是否相等。

也就是說,要處理諸如object == intobject == object表達式。

這是因為object()實際上並沒有實現__eq__() 這里的“默認”是:

class A(object):
    def __eq__(self, other):
        if self is other:
            return True

        return self == other

但是,如果您嘗試的工作有效,您實際上將檢查父類的self實例是否等於other實例。 並且,它是相同的對象( self ),所以它會。 所以最接近你的代碼實際上是:

class A(object):
    def __eq__(self, other):
        if self is other:
            return True

        return super(A, self) == other

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM