Код: Выделить всё
class A(np.ndarray):
def __new__(cls, foo: np.ndarray):
# Operate on foo...
x = np.array([1.]) + foo # (placeholder)
return x
def bar(self, x):
# Other stuff...
Код: Выделить всё
class A:
def __new__(cls, foo: Union[np.ndarray, cupy.ndarray]):
xp = cupy.get_array_module(foo) # Returns either `numpy` or `cupy` depending on `foo`
# Operate on foo...
x = xp.array([1.]) + foo # (placeholder)
return xp.__new__(cls, x)
def bar(self, x):
# Other stuff...
Код: Выделить всё
class BaseA(ABC):
def bar(self, x):
# Other stuff...
class ANumpy(BaseA, np.ndarray):
pass
class ACupy(BaseA, cupy.ndarray):
pass
class A:
def __new__(cls, foo: Union[np.ndarray, cupy.ndarray]):
if isinstance(foo, cupy.ndarray):
return ACupy(foo)
return ANumpy(foo)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
Мобильная версия