Я хочу сделать класс таким, чтобы любое взаимодействие с его экземпляром возвращало другой экземпляр этого класса. Это будет похоже на то, как nans взаимодействуют с другими числами:
import numpy as np
np.nan + 3
Out[3]: nan
Но это применимо к любому python объекту:
nan_like + [3,2,1]
Out[4]: nan_like
, а также к любой операции:
nan_like[10]
Out[5]: nan_like
Лучшее, что я придумал до сих пор, это:
import numpy as np
class NanLike(np.lib.mixins.NDArrayOperatorsMixin):
def __init__(self):
pass
def __getitem__(self, index):
return NanLike()
def __str__(self):
return "NanLike"
def __repr__(self):
return "NanLike"
def __call__(self, *args, **kwargs):
return NanLike()
def __array_ufunc__(self, ufunc, method, *inputs, **kwargs):
return NanLike()
def __array_function__(self, func, types, args, kwargs):
return NanLike()
nan_like = NanLike()
print(nan_like + [3,2,1])
print(nan_like[10])
Что действительно ведет себя так, как я хочу. Но в моем приложении возможно, что у меня будет довольно много таких объектов. Это мудро? Я изучал возможность сделать его синглтоном, таким как объект None, но, похоже, существует сильная позиция против синглтонов, когда люди говорят, что необходимость в синглтоне является индикатором плохой архитектуры, и я не хочу, чтобы pu sh вперед, если то, что я пытаюсь сделать, по своей сути плохое.