在 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
基本上我有一个 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