
Функция
callable()— это встроенная функция в Python, которая проверяет, может ли указанный объект быть вызван. Объект считается вызываемым, если он может быть вызван как функция или метод.
Такими объектами могут быть функции, методы классов, а также классы с определенным методом __call__().
Функция callable() имеет следующий синтаксис:
callable(object)Аргумент функции:
object: Объект, который необходимо проверить на вызываемость.Функция callable() возвращает True, если указанный объект является вызываемым, и False в противном случае.
Проверка вызываемости функции
Функции в Python являются вызываемыми объектами. Таким образом, функция callable() возвращает True, когда ее аргументом является функция.
def test_function():
pass
print(callable(test_function)) #TrueПроверка вызываемости метода класса
Методы класса также являются вызываемыми объектами.
class TestClass:
def test_method(self):
pass
print(callable(TestClass().test_method)) #TrueПроверка вызываемости класса с методом __call__()
Если класс определяет метод __call__(), то его экземпляры становятся вызываемыми объектами.
class CallableClass:
def __call__(self):
pass
print(callable(CallableClass())) #TrueПроверка невызываемого объекта
Если объект не может быть вызван, то callable() возвращает False.
class NonCallableClass:
pass
print(callable(NonCallableClass())) #FalseВызываемые классы
Хотя классы и сами по себе являются вызываемыми (так как они могут быть вызваны для создания экземпляров), функция callable() проверяет не класс ли это, а может ли объект быть вызван. Например:
class MyClass:
pass
print(callable(MyClass)) # True - класс можно "вызвать" для создания экземпляра
instance = MyClass()
print(callable(instance)) # False - сам экземпляр класса уже не вызывается, если только класс не имеет метод __call__()
Классы с методом __call__
Если класс имеет метод __call__, его экземпляры будут вызываемыми, так как Python вызывает метод __call__ при попытке «вызвать» объект. Это позволяет объектам вести себя как функции:
class CallableClass:
def __call__(self):
return "Hello, world!"
instance = CallableClass()
print(callable(instance)) # True
print(instance()) # "Hello, world!"Объекты и их методы
Стоит учесть, что методы объектов всегда вызываемы, но сами объекты — нет, если только у них нет метода __call__. Однако, в некоторых случаях, объект может быть неявно вызываемым, если он определяет некоторые специальные методы, такие как __getitem__. Несмотря на это, callable() все равно вернет False для таких объектов, поскольку они не могут быть «вызваны» в строгом смысле слова:
class ItemGetter:
def __getitem__(self, index):
return index ** 2
item_getter = ItemGetter()
print(callable(item_getter)) # False, несмотря на наличие метода __getitem__
print(item_getter[2]) # 4, объект может быть использован синтаксисом вызова функции
Функция callable() в Python предоставляет простой и эффективный способ определения того, может ли объект быть вызван как функция или метод. Это полезно для обработки различных типов объектов и предотвращения ошибок во время выполнения.
Содержание: