【发布时间】:2014-12-18 22:45:30
【问题描述】:
我想创建一个从 NumPy ndarray 继承的类,并且我想以这样一种方式做到这一点,即我不需要在实例化时为数组提供值,但可以让它默认为某个值。我很难让它工作:
import numpy
class Variable(numpy.ndarray):
def __init__(
self,
name = "trk_pt",
tree = None, # tree object
eventNumber = None,
eventWeight = None,
numberOfBins = None, # binning
binningLogicSystem = None, # binning
):
# 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
# NumPy ndarray inheritance
#self = ([1])
if sys.version_info >= (3, 0):
super().__init__([1])
else:
super(numpy.ndarray, self).__init__([1])
a = Variable()
我遇到的错误如下:
TypeError: Required argument 'shape' (pos 1) not found
如何编写代码,使数组在实例化时具有默认值并且不需要值?
【问题讨论】:
-
您可能想使用
__new__,而不是__init__。不过好久没用了,所以恐怕我不记得你应该在这里做什么了。 -
你检查过this吗?子类化 ndarray 与常规的 python 类没有什么不同。
-
super(Variable, self).__init__是super的正确 v2 用法。 -
您计划对新班级采取哪些
array行动?将一个变量添加到另一个变量?您将如何设置新变量的.tree属性?
标签: python arrays inheritance numpy instantiation