Я реализую объект, похожий на массив, который должен взаимодействовать со стандартными массивами numpy.Я просто столкнулся с раздражающей проблемой, которая сводится к следующему:
class MyArray( object ):
def __rmul__( self, other ):
return MyArray() # value not important for current purpose
from numpy import array
print array([1,2,3]) * MyArray()
Это приводит к следующему выводу:
[<__main__.MyArray instance at 0x91903ec>
<__main__.MyArray instance at 0x919038c>
<__main__.MyArray instance at 0x919042c>]
Понятно, вместо того, чтобы вызывать MyArray().__rmul__( array([1,2,3]) )
, как я надеялся,__rmul__
вызывается для каждого отдельного элемента массива, а результат переносится в массив объектов.Мне кажется, что это не соответствует правилам принуждения python .Что еще более важно, это делает мое левое умножение бесполезным.
Кто-нибудь знает способ обойти это?
(Я думал, что это можно исправить с помощью __coerce__
, но связанный документ объясняет, что этобольше не вызывается в ответ на бинарные операторы ...)