python – 为什么不会动态地添加一个`__call__`方法到一个实例?
在
Python 2和
Python 3中的代码:
class Foo(object): pass f = Foo() f.__call__ = lambda *args : args f(1,2,3) 返回为错误Foo对象不可调用.为什么会这样呢? PS:用老式的课程,按照预期工作. PPS:有行为(请参阅接受的答案).作为一个解决方法,可以在类级别定义一个__call__,只需转发给另一个成员,并将此“正常”成员设置为每个实例__call__实现. 解决方法
双下划线方法总是在类中查找,而不是实例.见
Special method lookup for new-style classes:
这是因为类型可能需要支持相同的操作(在这种情况下,特殊方法在元类型上查找). 例如,类是可调用的(这就是生成一个实例),但是如果Python在实际对象上查找__call__方法,那么在为其实例实现__call__的类中,您永远不会这样做. ClassObject()将成为ClassObject .__调用__(),因为self参数不会传入未绑定的方法,所以会失败.所以代替键入(ClassObject).__调用__(ClassObject),并调用instance()转换为type(instance).__调用__(instance). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 在boost :: python的类中公开public struct
- python – 使用ZMQ PUB与.connect()或.bind()方法有什么区
- python – httplib2,如何设置多个cookie?
- python – 使用用户定义的规则对项目进行排序
- python监控网站运行异常并发送邮件的方法
- 【python-leetcode448-循环排序】找到所有数组中消失的数字
- Python自动化测试Eclipse+Pydev 搭建开发环境
- 打造一款Python实现自动下载电影的“脚本”!那种电影也可以
- day78:luffy:前端对于token的认证&滑动验证码的实现
- python – 如何标记正则表达式模式ITSELF?