【发布时间】:2013-09-12 00:30:45
【问题描述】:
我正在尝试为类重载 in 运算符以返回非 bool 对象,但它似乎无论如何都会强制转换。这是我的用例:
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 代表 veggie == 'carrot',True 代表 fruit in ['apple', 'orange']。有没有办法让 ds 以 SubsetFilter 结尾?
【问题讨论】:
标签: python operator-overloading