Python报”TypeError: ‘NotImplementedType’ object is not callable “的原因以及解决办法

问题描述

在使用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技术站

(0)
上一篇 2023年3月14日
下一篇 2023年3月14日

相关文章

合作推广
合作推广
分享本页
返回顶部