📅  最后修改于: 2023-12-03 15:10:29.763000             🧑  作者: Mango
TypeError: 'xxx' is not callable
当你在 Python 编程中看到这个错误信息时,通常代表着你正在尝试调用一个不可调用的对象。这个错误消息的原因可能是多样的,例如你正在尝试调用一个整数、字符串等不可调用的类型,或者是你想要调用的对象名和你想要调用的方法名混淆了。
下面是几种可能导致该错误信息的场景和解决方案:
如果你尝试调用一个整数或字符串,你会看到这样的错误信息:
x = 10
x()
# TypeError: 'int' object is not callable
这个错误信息告诉我们,整数类型是不可调用的。同样的,如果你尝试调用一个字符串,你也会看到类似的错误信息:
s = 'hello'
s()
# TypeError: 'str' object is not callable
解决方案:请确保你要调用的对象是可调用的,例如函数或方法。
如果你想要调用一个对象的方法,但是却用对象名来调用,你会看到这样的错误信息:
class Student:
def study(self):
print('student is studying')
s = Student
s.study()
# TypeError: study() missing 1 required positional argument: 'self'
这个错误信息告诉我们,我们需要将对象实例化,并指定给一个变量。这里,我们使用了类名来访问类的方法,而不是使用该类的实例。因此我们需要将 Student()
赋值给变量 s。
解决方案:请确保你使用对象实例,而不是对象本身,并且确保你正在调用该对象的方法而不是其他东西。
如果你正在尝试调用一个对象,但它本身不是可调用的,你会看到这样的错误信息:
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
h = Human('Sam', 20)
h()
# TypeError: 'Human' object is not callable
这个错误信息告诉我们,我们正在尝试调用一个并不是可调用的对象。在这个例子中,我们将 h
实例化为 Human
类的对象,但是 Human
类本身不是一个可调用的对象。
解决方案:请确保你使用可调用的对象。如果你要将普通的对象变成可调用的,你可以实现 __call__
方法,这个方法允许你将对象变成可调用的。
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def __call__(self):
print(f'{self.name} is {self.age} years old.')
h = Human('Sam', 20)
h()
# Sam is 20 years old.
在这里,我们定义了一个 __call__
方法,并用它将普通对象转变成可调用的。当我们调用这个对象时,它会打印出该对象的属性信息。
总结:TypeError: 'xxx' is not callable
代表着你正在尝试调用一个不可调用的对象。请确保你要调用的对象是可调用的,例如函数或方法,并且确保你正在调用该对象的方法而不是其他东西。如果你要将普通的对象变成可调用的,你可以实现 __call__
方法。