Python callable()和__call __()
时间:2020-02-23 14:42:29 来源:igfitidea点击:
如果对象看起来可调用,Python callable(object)函数将返回True,否则返回False。
Python可调用和__call __()
如果Python对象定义了__call __()
函数,则称为可调用对象。
如果定义了此函数,则x(arg1,arg2,…)
是x .__ call __(arg1,arg2,…)
的简写。
请注意,如果对象显示为可调用,则callable()函数将返回True,即使该对象不可调用,也有可能返回True。
但是,如果此函数返回False,则该对象绝对不可调用。
此外,python类始终是可调用的。
因此,请始终对类的实例(而不是类本身)使用callable()。
让我们看一个简单的例子来检查这种行为。
class Person: i = 0 def __init__(self, id): self.i = id p = Person(10) print('Person Class is callable = ', callable(Person)) print('Person object is callable = ', callable(p))
输出:
Person Class is callable = True Person object is callable = False
Python callable()和__call __()示例
让我们用__call __()
函数定义一个类。
class Employee: id = 0 name = "" def __init__(self, i, n): self.id = i self.name = n def __call__(self, *args, **kwargs): print('printing args') print(*args) print('printing kwargs') for key, value in kwargs.items(): print("%s == %s" % (key, value)) e = Employee(10, 'hyman') # creating object print(e) # printing object print(callable(e))
- args用于允许将变量参数传递给
__call __()
函数。
** kwargs用于允许将命名参数传递给__call __()
函数。
输出:
<__main__.Employee object at 0x107e9e1d0> True
让我们看一些代码片段,在这些片段中,我们将使用callable()来检查对象是否可调用,然后将其作为函数调用。
if callable(e): e() # object called as a function, no arguments e(10, 20) # only args e.__call__(10, 20) e(10, 20, {'x': 1, 'y': 2}) # only args of different types e(10, 'A', name='hyman', id=20) # args and kwargs both
输出:
printing args printing kwargs printing args 10 20 printing kwargs printing args 10 20 printing kwargs printing args 10 20 {'x': 1, 'y': 2} printing kwargs printing args 10 A printing kwargs name == hyman id == 20