我试图重载in
一个类的运算符以返回一个非布尔对象,但它似乎无论如何都会强制转换。这是我的用例:
class Dataset(object):
def __init__(self):
self._filters = []
def filter(self, f):
self._filters.append(f)
return self
class EqualFilter(object):
def __init__(self, field, val):
...
class SubsetFilter(object):
def __init__(self, field, vals):
...
class FilterBuilder(object):
def __init__(self, field):
self._field = field
def __eq__(self, val):
return EqualFilter(self._field, val)
def __contains__(self, vals):
return SubsetFilter(self._field, vals)
veggie = FilterBuilder('veggie')
fruit = FilterBuilder('fruit')
ds = Dataset().filter(veggie == 'carrot').filter(fruit in ['apple', 'orange'])
在代码的末尾,ds
包含一个EqualFilter
forveggie == 'carrot'
和True
for fruit in ['apple', 'orange']
。有没有办法让 ds 以 a 结束SubsetFilter
?