问题描述
在使用Python时,有时会遇到“TypeError: 'NotImplementedType' object is not callable”这样的错误信息。这个错误通常出现在当我们尝试调用某个方法,但该方法返回了“NotImplemented”时。
出现此错误的代码示例:
class MyClass:
def __eq__(self, other):
return NotImplemented
a = MyClass()
b = MyClass()
if a == b:
print("equal")
解决方法
要解决这个问题,我们需要在类中将eq()方法(或ne()、lt()等其他可比较方法)正确地实现。这些方法必须返回True、False或NotImplemented三种情况之一。
以下是改进后的代码示例:
class MyClass:
def __eq__(self, other):
if isinstance(other, self.__class__):
return True
return NotImplemented
a = MyClass()
b = MyClass()
if a == b:
print("equal")
现在这个例子就不会抛出“TypeError: 'NotImplementedType' object is not callable”错误了。
对于其他可比较方法(例如lt()、le()、gt()、ge()等),我们需要根据需要实现类似的检查,以避免返回“NotImplemented”而导致的调用错误。
总之,要避免“NotImplementedType”对象无法调用的错误,我们需要在使用eq()、ne()、lt()等方法时正确地实现它们。如果我们在方法中不知道如何处理某种比较,则应返回NotImplemented,使Python确认另一个操作数是否能够处理它。在这种情况下,Python会尝试调用反向比较方法来尝试解决这个问题。如果反向比较方法也将NotImplemented返回,则Python将报告比较结果未实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python报”TypeError: ‘NotImplementedType’ object is not callable “的原因以及解决办法 - Python技术站