我有这个程序
a = 5
print("valor=", 5*a())
执行时会抛出这个错误:
Traceback (most recent call last):
File "/home/candid/PycharmProjects/scrapper2/scrapper.py", line 2, in <module>
print("valor=", 5*a())
TypeError: 'int' object is not callable
而且我不明白我做错了什么。
简短说明:
[]
用于访问集合的元素。用于()
调用函数。在 Python 中,当
X
任何对象可以用作函数调用X()
时,它都是可调用的,可能接收参数并返回一些东西。数值变量是不可调用的。它不是被定义的东西;该值后面没有要执行的代码。
出于同样的原因,字符串、列表、元组和字典也是不可调用的。
通常,当使用它们
()
而不是[]
访问字符串、列表、元组或字典中的元素时,会发生此错误。以下用途是正确的(带
[]
):生产
但是如果你把它们
[]
改成()
抛出错误:
什么对象是可调用的?
定义魔术方法的函数、生成器和任何对象都是可调用
__call__
的。示例:我们有一个类
Cliente
,它存储名称和余额:我们可以创建一个客户端
但我们不能说
然后出现错误
这表示该类
Cliente
是不可调用的,因此该类的对象不是。为了使其可调用,我们定义了方法
__call__
,并带有以下签名请注意,您始终必须使用这些参数定义它,即使它们未在特定实现中使用。否则,Python 不会考虑类callable 。
这种方法应该做什么?适合我们应用的任何内容;例如,在银行应用程序中,最常用的方法可能是客户余额查询:
所以,我们重新定义类
Cliente
:现在打印客户余额。
注意:这个例子通常是通过定义一个查询函数来解决的
但是怎么了!你必须举一个简单的例子。
__call__
当您经常使用某个特定方法并且您不想一遍又一遍地键入方法名称时,实现更多的是方便。如何知道一个对象是否可调用?
如果对象可调用,则
callable(objeto)
返回函数,否则:True
False