Python 可调用对象

2020-04-28  本文已影响0人  eeert2

当我们将函数作为参数传递时,实际传递的是一个可调用对象,我们要执行该函数对象也很简单,执行在函数对象两侧加()即可。

def say():
    print('Hello ')


def my_say(start):
    start()

    print('World!')


if __name__ == '__main__':
    my_say(say)
    # Hello 
    # World!

在上面的例子中,我们在my_say中执行了say函数。

一、Python中共有7中可调用对象。

def fn():
    pass

if __name__ == '__main__':
    print(type(fn))  # <class 'function'>
if __name__ == '__main__':
    print(type(max))  # <class 'builtin_function_or_method'>
if __name__ == '__main__':
    print(type(dict.get))  # <class 'method_descriptor'>
class Student:

    def study(self):
        print('学习,学个屁!')


if __name__ == '__main__':
    print(type(Student().study))  # <class 'method'>
class Student:

    def study(self):
        print('学习,学个屁!')

    def __call__(self, *args, **kwargs):
        print('执行对象调用!')


if __name__ == '__main__':
    student = Student()
    student()  # 执行对象调用!

这里如果没有实现__call__方法,则会报错

TypeError: 'Student' object is not callable

二、因此判断对象能否调用

Python 中有各种各样可调用的类型,因此判断对象能否调用,最安全的方法是使用内 置的 callable() 函数:

>>> abs, str, 13 
(<built-in function abs>, <class 'str'>, 13) 

>>> [callable(obj) for obj in (abs, str, 13)] 
[True, True, False]
上一篇 下一篇

猜你喜欢

热点阅读