Рубрики
Без рубрики

Позвони мне, может быть – объяснения Python Callables

Если у вас есть опыт работы с Python, вы, должно быть, уже видели типа «T» Объект не CA … Теги с Python.

Если у вас есть опыт работы с Python, вы, должно быть, уже видели TypeError: «T» Объект не Callable Отказ

В этой статье мы постараемся демистифицировать этот вид ошибок.

А Callable это все, что можно назвать, из функции, к конструктору класса.

Например, Лен вызывается, потому что мы можем написать Лен (объект) .

Самый простой способ написать функцию или лямбда:

def foo(*args):
    pass

bar = lambda *args: 0

Но здесь мы не будем охватывать эти вещи, поскольку они являются основными знаниями Python.

class Foo:
    def __call__(self, *args):
        print("hello world!")

bar = Foo()  # instanciating a Foo object, creating a callable
bar()  # calling it!

Мы создали базовый Callable, давая ему __call__ Метод, и мы можем проверить, является ли объект Callable (полезно при отладке) с помощью:

# homemade method to explain EAFP
def is_callable(obj, *args, **kwargs, ***okwargs):
    try:
        obj(*args, **kwargs, ***okwargs)
    except TypeError as e:
        return 'object is not callable' not in str(e)
    return True

# built-in way to check if an object is callable (thanks rhymes for pointing it out): using callable(obj)
>>> callable(foo), callable(bar), callable(Foo), callable(Foo()), callable(3)
(True, True, True, True, False)

Потому что мы не можем использовать Hasattr (Obj, '__call__') , так как Python пропускает __getattribute__ и __getattr__ Когда Призыв что-то, таким образом, мы можем сделать только то, что называется Eafp. : Е до А Спросите прощение, чем разрешение.

Надеюсь, эта статья помогла вам, если у вас есть что-нибудь, чтобы добавить, не стесняйтесь оставить комментарий!

Оригинал: “https://dev.to/superfola/call-me-maybe-an-explanations-of-python-callables-4fmc”