Как указать для проверки в isinstance() тип объекта "function"?
Возникла необходимость использовать isinstance() для функции. Но не все оказалось просто.
def foo():
...
def bar(d):
return d
isinstance(foo, type(bar))
Работает правильно и возвращает True. Однако зарезервированного слова для function нет. И при попытке написать что то типа
isinstance(foo, function)
Мы получаем ошибку, несмотря на то, что
type(bar)
function
Хотя я и привел выше работающий вариант кода, я воспринимаю его как "костыль". Как говорят гранды - "Должен быть способ лучше!" )
Ответы (1 шт):
Автор решения: Vasyl Kolomiets
→ Ссылка
Здесь нашел ответ.
from types import BuiltinFunctionType, BuiltinMethodType, FunctionType, MethodType, LambdaType
from functools import partial
def is_function(obj):
return isinstance(obj, (BuiltinFunctionType,
BuiltinMethodType, FunctionType, MethodType, LambdaType, partial))
#-------------------------------------------------
def my_func():
pass
def add_both(x, y):
return x + y
class a:
def b(self):
pass
check = [
is_function(lambda x: x + x),
is_function(my_func),
is_function(a.b),
is_function(partial),
is_function(partial(add_both, 2))
]
print(check)
>>> [True, True, True, False, True]
Вот уж не знал, что в Python столько разных типов для того, что я ощущал под одним словом "функция".