【问题标题】:How should methods be created for a class that inherits from NumPy ndarray?应该如何为继承自 NumPy ndarray 的类创建方法?
【发布时间】:2014-12-19 16:32:17
【问题描述】:

我正在创建一个继承自 NumPy ndarray 的类。我在给它方法时遇到了一些麻烦。具体来说,当我在类中添加一个简单的方法printout 时,会出现以下错误:

AttributeError: 'NoneType' object has no attribute 'printout'

我应该如何向这个类添加方法?另外,有没有推荐的方法在这个类内部更改self 的值?

import numpy

class Variable(numpy.ndarray):

    def __new__(
        cls,
        name                    = "trk_pt",
        tree                    = None, # tree object
        eventNumber             = None,
        eventWeight             = None,
        numberOfBins            = None, # binning
        binningLogicSystem      = None, # binning
        ):
        self = numpy.asarray([]).view(cls)
        # arguments
        self._name              = name
        self.tree               = tree
        self.eventNumber        = eventNumber
        self.eventWeight        = eventWeight
        self.numberOfBins       = numberOfBins
        self.binningLogicSystem = binningLogicSystem
        # internal
        self.variableObject     = None
        self.variableType       = None
        self.dataType           = None
        self.variableDataTypes  = None
        self.canvas             = None
        self.histogram          = None
        self._values            = [] # list of values
        self._valuesRaw         = [] # list of unmodified, raw values

    def printout(
        self
        ):
        print("hello world")

a = Variable()
a.printout()

【问题讨论】:

  • .view 不返回任何内容
  • 如果你使用__new__,你必须返回你的类的新创建的实例。

标签: python class inheritance numpy methods


【解决方案1】:

正如@sebastian 所说,new 必须返回您创建的实例。只需在构造函数的末尾添加 return self (我已经对其进行了测试,它对我有用):

   ...
   self._values            = [] # list of values
   self._valuesRaw         = [] # list of unmodified, raw values

   return self

【讨论】:

  • 太好了,非常感谢您的帮助。从 NumPy 数组继承肯定与通常的 Python 继承有点不同。
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2019-11-27
  • 2013-09-26
  • 2018-05-10
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多