1

Довольно странный вопрос, но можно ли перегрузить значение определенных типов кронштейнов, например. <, >, [, ] and | в python. Например, если у меня есть какие-то экземпляры объектов MyObj1 и MyObj2, я мог бы спроектировать что-то, в результате чего <MyObj1 | MyObj2 > было понято как вызов метода в MyObj1?Кронштейны с перегрузкой в ​​python

Я думаю, что это, вероятно, не может/не должно быть сделано, но я думал, что спрошу!

+0

Uhhhhh ... * Почему? * РЕДАКТИРОВАТЬ: Кроме того, нет, это невозможно, если вы не разблокируете CPython и не напишите код самостоятельно, чтобы его поддерживать. – Ffisegydd

+1

Хотя вы можете перегружать операторов, вы не можете изменить их [arity] (http://en.wikipedia.org/wiki/Arity). Оба '<' and '>' - это двоичные операторы, которым требуются два операнда, даже если вы их перегружаете. –

+0

Да, я подумал, что это могло быть немного далеко, но в кратком объяснении я хотел написать что-то, чтобы вычислить Bra-Kets (http://en.wikipedia.org/wiki/Bra%E2%80%93ket_notation) удобно и синтаксически подобным образом – JMzance

ответ

4

№. Единственная перегрузка оператора, разрешенная в Python, изменяет семантику среды выполнения уже существующих операторов. Синтаксис <MyObj1 | MyObj2 > будет включать либо создание <, либо > в унарные операторы (один префикс, один постфикс) или превращение их в один оператор «обводной». Поскольку в настоящее время они являются и двоичными инфиксными операторами, такое изменение невозможно.

Смежные вопросы