Ü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
?