Поскольку нет возможности провести различие между вызовами u [x, y] и u [(x, y)], вам следует перенести одну из двух операций, которые вы пытаетесь определить, на фактический метод. Вы знаете, что-то с именем u.slice () или u.range () или u.getslice () или u.getrange () или что-то в этом роде.
На самом деле, когда я пишу свои собственные программы, я обычно нахожу, что когда я пытаюсь перегрузить операцию Python двумя совершенно разными семантиками, это означает, что обе вещей Я делаю нужно превратить в именованные методы! Потому что, если они настолько похожи в том смысле, что ни у одного из них нет явных преимуществ при использовании ярлыка braces [] getitem, то, вероятно, мой код станет более читабельным, если обе операции станут действительными, читаемыми явные имена методов.
Но трудно сказать больше, так как вы не сказали нам, как на земле вы попали в этот беспорядок. Почему вы хотите хранить вещи под кортежами и , чтобы получать разные вещи? Есть подозрение, что вы делаете что-то сложное для начала. : -)
Да, и другие языки с этой проблемой заставляют вас [1] [2] делать многомерный доступ, чтобы легко отличить его от [1,2]. Просто чтобы вы знали, что есть другой вариант.