Согласно документации Cython, касающейся специальных арифметических методов (перегрузки операторов), способа их реализации я не могу полагаться на self
, являющийся объектом, специальный метод которого вызывается.
Очевидно, это имеет два последствия:
- Я не могу указать статический тип в объявлении метода. Например, если у меня есть класс
Foo
, который можно умножить, скажем, на int
, то я не смогу получить def __mul__(self, int op)
, не увидев TypeError
с (иногда).
- Чтобы решить, что делать, я должен проверить типы операндов, предположительно используя
isinstance()
для обработки подклассов, что кажется оператору дорогостоящим фарсом.
Есть ли хороший способ справиться с этим, сохранив удобство синтаксиса оператора? Вся моя причина переключения моих классов на типы расширений Cython состоит в том, чтобы повысить эффективность, но, поскольку они сильно зависят от арифметических методов, основанных на вышеизложенном, кажется, что я на самом деле собираюсь сделать их еще хуже.