Мне известна встроенная функция range(), но я намерен поддерживать произвольные типы (или, в частности, даты, в моем случае).
Глядя на иерархию типов Python, кажется, что диапазон может быть последовательностью или набором тип довольно логично, но я не уверен, что имеет больше смысла: не лучше ли было бы отказаться от включения моего класса в эту иерархию и просто реализовать то поведение, которое я хочу.
Как последовательность:
- Достаточно хорошо соответствует спецификации, это «конечный упорядоченный набор».
Диапазон можно подсчитывать, разрезать и перебирать. - Однако потенциально я хочу поддерживать неограниченные диапазоны, например [0,+∞), так что, возможно, сказанное выше неверно.
- Немного менее соответствует спецификациям, поскольку диапазон явно упорядочен.
- Концептуально больше похоже на диапазон, поскольку теоретико-множественные операции, такие как пересечение и объединение, имеют больше смысла.
- Правильное представление того, что содержит проверки, эффективно.
- Мы теряем преимущества следования шаблонам вышеуказанных типов (нам пришлось бы определить например, отдельный метод range.slice())
- Но мы более четко заявляем, что эту структуру также не следует путать с этими типами. Тот факт, что диапазон Guava не выходит за пределы API коллекции, похоже, подтверждает этот аргумент.
Подробнее здесь: https://stackoverflow.com/questions/236 ... -in-python