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

