Функция
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 предоставляет простой и эффективный способ определения того, может ли объект быть вызван как функция или метод. Это полезно для обработки различных типов объектов и предотвращения ошибок во время выполнения.
Содержание: