我是猴子修補類的__eq__
方法。我發現了以下工作:Python3 - 在__eq__方法中使用super()會引發RuntimeError:super():__class__ cell not found
def eq(obj, other):
if isinstance(other, str):
return obj.name.upper() == other.upper()
else:
return object.__eq__(obj, other)
這不起作用:
def eq(obj, other):
if isinstance(other, str):
return obj.name.upper() == other.upper()
else:
return super().__eq__(other)
這有時可行,但有時引發和錯誤:
def eq(obj, other):
if isinstance(other, str):
return obj.name.upper() == other.upper()
else:
return super().__eq__(self, other)
錯誤:
<ipython-input-128-91287536205d> in eq(obj, other)
3 return obj.name.upper() == other.upper()
4 else:
----> 5 return super().__eq__(self, other)
6
7
RuntimeError: super(): __class__ cell not found
你能解釋一下wh在這裏呢?如何正確地將object
替換爲super()
?
還有就是你的「不工作」和「有時作品的例子,除了壓痕彼此之間沒有什麼區別。只要沒有到達'else'分支,只有'有時'工作。 –
請注意'super(...).__ eq__'是一個* bound方法*,所以第一個參數(通常命名爲'self')自動從第二個參數傳入'super(cls,instance)'。你只需要傳入'other':'super(...).__ eq __(other)'。 –