Python报错”TypeError: ‘method’ object is not callable “怎么处理?

  • Post category:Python

问题简述:
当在Python代码中使用对象的方法时,可能会出现 “TypeError: ‘method’ object is not callable ” 的错误。

原因分析:
在Python中,当我们定义一个类,并且在类中定义了一个方法时,该方法在对象实例化之后会自动绑定到该对象上。我们在调用对象的该方法时,直接使用类似 obj.method() 的形式即可。但是,当我们定义一个类方法或实例方法时,我们需要在方法前加上 @classmethod 或 @staticmethod 装饰器来表示对应的方法类型。如果我们在调用这些方法时未加上类名或对象名,就可能导致错误。

除此之外,如果我们将方法定义为变量并在后续调用时将其当做函数来使用,就会出现上述错误。这种情况下,因为方法作为属性被赋值给变量,因此变量的值为 “method” 类型,它不是可调用(callable)对象的类型,所以在调用时会出现 “TypeError: ‘method’ object is not callable ” 的错误。

解决办法:
1. 确认是否未加上类名或对象名调用类方法或实例方法。如果是的话,应该加上对应的类名或对象名来调用方法。
2. 确认是否将方法定义为变量并在后续调用时将其当做函数来使用。如果是的话,应该通过增加类名或对象名来调用方法,或者将方法作为函数调用而非属性调用。

例如,下面的代码中,漏加了类名调用静态方法,导致出现 “TypeError: ‘method’ object is not callable ” 的错误。

class MyClass:
    @staticmethod
    def my_static_method():
        print('This is a static method.')

# 错误的调用方式
my_static_method = MyClass.my_static_method
my_static_method()  # 报错

# 正确的调用方式
MyClass.my_static_method()

为了消除这个错误,我们应该在调用静态方法时显式写出类名。