TL; DR: Beim Dekorieren einer Klasse mit @numba.jitclass
erscheinen spezielle Methoden wie __add__
nicht in Instanzen der Klasse, während andere Methoden normal funktionieren. Warum passiert das?Wohin gehen `@numba.jitclass`ed spezielle Methoden?
Betrachten Sie die folgende Klassendeklaration:
import numba as nb
dual_spec = [('x', nb.float64), ('y', nb.float64)]
@nb.jitclass(dual_spec)
class xy:
def __init__(self, x, y):
self.x = x
self.y = y
def addition(self, other):
return xy(self.x + other.x, self.y + other.y)
def __add__(self, other):
return xy(self.x + other.x, self.y + other.y)
Ohne die Dekorateur die Klasse perfekt funktioniert gut. Aufgrund der __add__
Methode sind Ausdrücke wie xy(1, 2) + xy(3, 4)
möglich und liefern erwartete Ergebnisse. Doch mit dem Dekorateur bekomme ich folgende Fehlermeldung:
>>> xy(1, 2) + xy(3, 4) # TypeError: unsupported operand type(s) for +: 'xy' and 'xy'
>>> xy(1, 2).addition(xy(3, 4)) # But this works nicely
Es ist wie die __add__
Methode aussieht, ist nicht in xy
Objekte:
>>> xy(1, 2).__add__ # AttributeError: 'xy' object has no attribute '__add__'
Aber die Methode ist in der Klasse:
Was macht Numba bei der Instanziierung mit der Methode __add__
? Gibt es eine andere Möglichkeit, Operatoren für Jitted-Klassen zu aktivieren, so dass ich xy(1, 2) + xy(3, 4)
schreiben kann?
Aww, schade. Zumindest muss ich nicht updaten :) – kazemakase