Sie können nicht Python bestehenden Syntaxregeln ändern (ohne die ganze Sprache zu ändern), aber man kann benutzbar nahe kommen, was Sie wollen:
class Interval(object):
def __init__(self, left_bracket, a, b, right_bracket):
if len(left_bracket) !=1 or left_bracket not in '[(':
raise ValueError(
'Unknown left bracket character: {!r}'.format(left_bracket))
if len(right_bracket) !=1 or right_bracket not in '])':
raise ValueError(
'Unknown right bracket character: {!r}'.format(right_bracket))
if a < b:
self.lower, self.upper = a, b
else:
self.lower, self.upper = b, a
self.left_bracket, self.right_bracket = left_bracket, right_bracket
if left_bracket == '[':
if right_bracket == ']':
self._contains = (
lambda self, val: self.lower <= val <= self.upper)
else:
self._contains = (
lambda self, val: self.lower <= val < self.upper)
else:
if right_bracket == ']':
self._contains = (
lambda self, val: self.lower < val <= self.upper)
else:
self._contains = (
lambda self, val: self.lower < val < self.upper)
__contains__ = lambda self, val: self._contains(self, val)
def __str__(self):
return '{}{}, {}{}'.format(self.left_bracket, self.lower, self.upper,
self.right_bracket)
def __repr__(self):
return '{}({!r}, {}, {}, {!r})'.format(self.__class__.__name__,
self.left_bracket, self.lower, self.upper, self.right_bracket)
if __name__ == '__main__':
interval1 = Interval('[', 1, 3, ']') # closed interval
interval2 = Interval('[', 1, 3, ')') # half-open interval
print('{} in {}? {}'.format(3, interval1, 3 in interval1))
print('{} in {}? {}'.format(3, interval2, 3 in interval2))
Ausgang:
3 in [1, 3]? True
3 in [1, 3)? False
Hinweis: Die Argumente a
und b
können alle Typen sein, die verglichen werden können.
Es ist nicht, weil Python seine eigene Interpretation von Klammern hat, können Sie versuchen, '[a, b)' in 'str' –
In der Praxis nehmen Programmierer normalerweise ein halboffenes Intervall (geschlossen auf der linken Seite) Sie geben etwas anderes an. Das ist es, was 'range()' für Integer verwendet, und so wird die Slicesyntax normalerweise interpretiert. Daher sind die vollständig offenen, vollständig geschlossenen oder geschlossenen Fälle die Sonderfälle, die eine ungewöhnliche Syntax haben sollten. – Kevin