python __getitem__()方法理解_Python的__call__()函数

ea1a614db8b71924627810ea456515e0.png

Python中的函数其实也是对象,且都是可调用对象。而通过为类定义__call__()方法我们也可以将自定义的Python类定制为可调用对象。

使用示例

54623acbfb051037460ed7594efe0d08.png

我们可以看到,对象实例w的两种等价调用方式分别是w.__call__(x)和w(x),前者为普通的调用类方法的方式,后者为Python中的语法糖实现了将对象变为可调用的目的。

另外明显对于无名的临时对象也是可调用对象:

444ecbe4e5121b4302070c4d6322d9bb.png

类可调用的与对象可调用的不同

要注意类都是可调用的,而对象可通过__call__()函数来设计为可调用或者不可调用。如下代码

e960ee95006b68e187a09fd83afa6d50.png

这里Apple类没有定义__call__()方法,因此其对象实例不是可调用对象,但是类本身是可调用的,因为调用类实际上就是返回一个实例,类似于执行__init__()函数。

__call__()函数还有其它用途

Python可以进行元编程。有一个技巧就是,当你不想让用户能够实例化一个类,而只能使用类的静态方法的时候,你可以通过结合__call__()函数与元编程来实现:

707ce5398acbeea951b8b71196c44fef.png

关于这个用法,可以参考小编的另一篇文章Python使用元类管理实例的创建

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值