python中什么是 可调用的,什么是不可调用的?

编程入门 行业动态 更新时间:2024-10-25 02:19:06

<a href=https://www.elefans.com/category/jswz/34/1770869.html style=python中什么是 可调用的,什么是不可调用的?"/>

python中什么是 可调用的,什么是不可调用的?

文章目录

  • python中什么是 可调用的,什么是不可调用的?
    • 概念介绍
    • 函数是可调用的吗
    • 类是可调用的吗
    • 总结
    • 相关文章

python中什么是 可调用的,什么是不可调用的?

概念介绍

什么叫可调用,这个对象,可以 通过某种方法 执行,或者说 这个对象

对象.(*args,**kw) 如果这个方法 可以执行 那么我们就说 这个对象是可调用的

在python中最常见的 比如函数 ,方法 ,这些都是可以调用的 因为这些都可以通过上述方法执行 。

函数是可调用的吗

比如我定义一个函数,他可以通过 函数名() 这种方式 执行 函数里面的代码段,这个函数我们就说 是可以调用的。

还有一个更加直观的方法 就是 直接 使用系统内置函数callable 来判断是不是可调用的。这个函数返回 True 就表明这个 函数是可调用的。

>>> def pickup():
...     pass
... 
>>> pickup()>>> callable(pickup)
True

类是可调用的吗

咱们来说一下类 , 你觉得类 是可调用的吗? 由类生成的对象 是可调用的吗?

class Person:def __init__(self, name='frank'):self.name = namedef sing(self):print(f"{self.name} is  singing")

首先说一下 结论 ,对于这个类而言 , Person 类 是可调用的。而由Person 生成的对象 是不可调用的。

>>> class Person:
...     def __init__(self, name='frank'):
...         self.name = name
... 
...     def sing(self):
...         print(f"{self.name} is  singing")
...         
>>> callable(Person)
True
>>> p = Person()
>>> callable(p)
False>>> p()
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: 'Person' object is not callable>>> callable(p.sing)
True
>>> p.sing()
frank is  singing

首先还是用刚刚我说的方法 判断 , Person 是不是可调用的, 只要看看 Person(*args,**kw) 这个能不能正常执行, 很明显 是可以执行, 用它来构造一个Person 的对象 p , 所以 我们 说 Person 是可以执行的 。

对于对象p 而言 ,只要看p(*arg,**kw) 能不能执行, 显然 这个例子 不能执行 。 所以我们说 对象 p 不能调用。

而对于对象p的 成员方法 sing而言 , p.sing() 这个显然 是可以执行的, 所以 对象p的成员方法 sing 是可以调用的。

那么问题来了, 对于一个对象 如何 从一个 不可调用 转换成 可调用的呢? 就是 实现魔术方法 __call__

稍微改造一下这个类,让 p 变成一个 可调用的对象 呢?

class Person:def __init__(self, name='frank'):self.name = namedef sing(self):print(f"{self.name} is  singing")# 添加这个魔术方法def __call__(self, *args, **kwargs):self.sing()

在控制台 演示一下:

>>> p = Person()
>>> p
<__main__.Person object at 0x000001786F29BBC8>
>>> callable(p)
True
>>> p()
frank is  singing

这个时候 可以通过 p() 这种方式 执行代码,我们就认为 对象 p 是可调用的。 当我们 执行 p() 实际上 执行就是魔术方法 __call__ 里面 的代码 ,这里等同于 是这样的调用关系 p() == p.___call__()

总结

一般情况 在python 中 函数,方法 类 都是可调用的 。至于 由类生成的对象,是否 是可调用的,主要是看 类中是否实现 魔术方法 __call__

相关文章

python 中 __call__简单介绍

分享快乐,留住感动. 2020-03-24 07:30:19 --frank

更多推荐

python中什么是 可调用的,什么是不可调用的?

本文发布于:2024-02-13 03:49:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690556.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!