我试图重载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包含一个EqualFilterforveggie == 'carrot'和Truefor fruit in ['apple', 'orange']。有没有办法让 ds 以 a 结束SubsetFilter?