Überladen Sie Python 'in', um nicht-bool zurückzugeben

Ich versuche die zu überlastenin Operator, mit dem eine Klasse ein Objekt zurückgibt, das kein Bool-Objekt ist. Es scheint jedoch trotzdem umgewandelt zu werden. Hier ist mein Anwendungsfall:

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'])

Am Ende des Codesds enthält eineEqualFilter zumveggie == 'carrot', undTrue zumfruit in ['apple', 'orange']. Gibt es eine Möglichkeit für ds, mit a zu enden?SubsetFilter?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage