__call__ 行为
__call__ behavior
我不理解__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'))
returns <__main__.Filter object at 0x103f2bf10>
同时
print(Filter(before='today', after='yesterday', source='web').__call__())
做我想做的事 returns 做 __call__()
中定义的事:before:today AND after:yesterday AND source:web
为什么会这样?我是否需要先创建一个空对象,然后实例化它,才能使 __call__
工作?
Filter(...)
不是 "call" 实例,它创建实例。要调用,请在结果对象上使用调用语法:
>>> Filter(...)()
或
>>> filt = Filter(...)
>>> filt()
在 Filter(before='today', after='yesterday', source='web')
中,您不调用实例,而是创建实例。当你 print
它时,你会得到 class Filter
实例的默认表示:<__main__.Filter object at 0x103f2bf10>
您需要先创建实例,然后调用它:
filter = Filter(before='today', after='yesterday', source='web')
filter()
输出:
'before:today AND after:yesterday AND source:web'
无需明确使用 <your instance>.__call__()
,只需像对任何函数一样使用括号即可。
我不理解__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'))
returns <__main__.Filter object at 0x103f2bf10>
同时
print(Filter(before='today', after='yesterday', source='web').__call__())
做我想做的事 returns 做 __call__()
中定义的事:before:today AND after:yesterday AND source:web
为什么会这样?我是否需要先创建一个空对象,然后实例化它,才能使 __call__
工作?
Filter(...)
不是 "call" 实例,它创建实例。要调用,请在结果对象上使用调用语法:
>>> Filter(...)()
或
>>> filt = Filter(...)
>>> filt()
在 Filter(before='today', after='yesterday', source='web')
中,您不调用实例,而是创建实例。当你 print
它时,你会得到 class Filter
实例的默认表示:<__main__.Filter object at 0x103f2bf10>
您需要先创建实例,然后调用它:
filter = Filter(before='today', after='yesterday', source='web')
filter()
输出:
'before:today AND after:yesterday AND source:web'
无需明确使用 <your instance>.__call__()
,只需像对任何函数一样使用括号即可。