在 Python 中,您能否更改 class 1 中的方法如何作用于 class 2 中的 class 2?

In Python, can you change how a method from class 1 acts on class 2 from within class 2?

基本上我有一个 class 子 class 是 ndarray 并且有额外的信息。当我在我的对象上调用 np.asarray() 时,它 returns 只是 numpy 数组并破坏了我的附加信息。

我的问题是:Python 中有没有办法改变 np.asarray() 从我的子[=26= 中作用于我的 ndarray 的子class 的方式]?我当然不想更改 numpy,我也不想遍历调用 np.asarray() 来处理这个问题的每个实例。

提前致谢!

克里斯

没有。 Numpy 的 asarray() 被编码为实例化一个常规的 numpy 数组,如果不编辑 asarray() 或更改调用者的代码以调用您的特殊方法而不是 asarray()[=13= ,则无法更改它]

简短回答:不。Numpy 的 asarray() 不检查例如如果在其参数的 class 上存在特殊方法,因此不提供覆盖其行为的方法。

长答案:从你的 subclass 不可能,但你可以在你的模块级代码中热修补 numpy 模块,用你自己的包装器替换 asarray 函数。这是一个非常 hacky 的解决方案,我不推荐它,但它可能适合你。

_real_asarray = np.asarray
def _new_asarray(a, dtype=None, order=None):
  if isinstance(a, MyClass):
    # special handling here
  else:
    return _real_asarray(a, dtype, order)
np.asarray = _new_asarray