首页 > 解决方案 > 重定向方法调用,如 __getattribute__()?

问题描述

我正在尝试继承 numpy.ndarray,但需要在方法中调整数组的大小,但到目前为止没有答案:

在方法内调整继承的ndarray的大小?

所以我的问题是如何将方法重定向到本地对象。对于属性,您可以使用__getattribute____getattr__是否有类似的方法选项?

像这样的东西:

class Blah():

   def __init__(...):
       ......
       self.obj = np.zeros(...)

  def __get_method__(self, method):
      return self.obj.method() ????

标签: pythonredirectmethodssubclass

解决方案


你不能只继承自numpy.array吗?

class Blah(numpy.array):
    def __init__(self, *args, **kwargs):
        numpy.array.__init__(self, *args, **kwargs)
        ....

    def resize(self, ...):
        ....

作为有时可能更方便的黑客,您可以选择

class Blah:
    ...
    def __getattr__(self, name):
        return getattr(self.obj, name)

但这通常是您以后会后悔的事情:-}。

编辑:回到第一种(更好的)方式:您可以就地调整大小。见这里:https ://numpy.org/doc/stable/reference/generated/numpy.ndarray.resize.html#numpy.ndarray.resize


推荐阅读