On Wednesday 02 December 2015 18:51:03 Aymeric Augustin wrote: > > We could implement a property that returns an object: > > - that is still callable, for backwards compatibility > - that evaluates correctly in a boolean context > > Then we can consider deprecating the ability to call it. > > > class CallableBool: > > def __init__(self, value): > self.value = value > > def __bool__(self): > return self.value > > def __call__(self): > return self.value > > def __repr__(self): > return 'CallableBool(%r)' % self.value > > CallableFalse = CallableBool(False) > > CallableTrue = CallableBool(True) >
More general alternative: class IdempotentCallMixin(object): def __call__(self): return self However, you can't extend bool, so class CallableBool(IdempotentCallMixin, bool): pass does not work, and you'd have to do something like class CallableBool(IdempotentCallMixin, int): pass which is less nice (because of __repr__ etc) Shai