gpt4 book ai didi

python - 检查 Callable 对象是否是函数

转载 作者:行者123 更新时间:2023-12-01 22:57:35 24 4
gpt4 key购买 nike

有没有办法区分内置函数<class 'function'> ,以及任何其他实现 __call__ 的可调用对象方法?

假设我们想要一个定义如下的函数:

def is_callable_function(obj: Callable) -> bool: ...

我们有这些可调用对象:

def function(*args, **kwargs): ...

class CallableObj1:
def __call__(self, *args, **kwargs): ...

class CallableObj2:
@classmethod
def __call__(cls, *args, **kwargs): ...

class CallableObj3:
@staticmethod
def __call__(*args, **kwargs): ...

然后它像这样工作:

>>> is_callable_function(function)
True
>>> is_callable_function(CallableObj1)
False
>>> is_callable_function(CallableObj2)
False
>>> is_callable_function(CallableObj3)
False

从技术上讲,像下面这样的实现将起作用:

def is_callable_function(obj: Callable) -> bool:
return type(obj).__name__ == "function"

但我相信有更好的方法。

最佳答案

inspect.isfunction(obj) 做你想做的事。

import inspect

class A:
def __call__(self, *args, **kwargs):
...

def a():
...

print(inspect.isfunction(A())) # False
print(inspect.isfunction(a)) # True

文档:https://docs.python.org/3/library/inspect.html#inspect.isfunction

关于python - 检查 Callable 对象是否是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72711354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com