【发布时间】:2020-04-20 01:20:01
【问题描述】:
我不明白__call__的行为:
class Filter:
def __init__(self, before, after, source):
self.filter = {}
self.filter['before:'] = before
self.filter['after:'] = after
self.filter['source:'] = source
def __call__(self):
return ' AND '.join([key + value for key, value in self.filter.items()])
当我调用实例时,__call__ 没有被执行:
print(Filter(before='today', after='yesterday', source='web'))
返回<__main__.Filter object at 0x103f2bf10>
同时
print(Filter(before='today', after='yesterday', source='web').__call__())
做我想做的事并返回__call__()中定义的内容:before:today AND after:yesterday AND source:web
为什么会这样?我是否需要先创建一个空对象,然后实例化它,才能使__call__ 工作?
【问题讨论】:
-
Filter(before='today', after='yesterday', source='web')不调用实例,而是调用构造函数Filter。调用实例将是Filter(before='today', after='yesterday', source='web')()尽管这似乎是对__call__dunder 方法的一种非常奇怪的用法......
标签: python python-3.7