gpt4 book ai didi

python - 为什么我的继承自 array.array 的类不起作用?

转载 作者:行者123 更新时间:2023-12-04 02:25:18 25 4
gpt4 key购买 nike

我想继承 array.array 类,这是我的代码。

import array
a = array.array('d', [1.0, 2.0, 3.14])

import numpy as np

class diff_rle_array(array.array):
def __init__(self, arr: array):
self._internal = np.ediff1d(arr)


diff_rle_array(a)

但是报错

>>> diff_rle_array(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: array() argument 1 must be a unicode character, not array.array

但是我已经覆盖了 __init__ 方法。是因为 array.array 在基础库中,因此很特殊吗?

最佳答案

C 实现的内置函数的存储不是命名属性,它集成到类型本身的方法和初始化器中。 _internalarray.array 意味着没有,它只是您附加到它的一个随机属性,它的任何方法都不会使用它。如果您想将值存储在 array.array 存储它们的位置(以便方法隐式使用它们),请委托(delegate)给父类。在这种情况下,array.array 中的实际工作是在 __new__(构造函数)中完成的,而不是在 __init__(初始化程序)中完成的,这意味着您需要显式构造并返回:

class diff_rle_array(array.array):
__slots__ = () # Not necessary, but avoids creation of __dict__ for arbitrary attributes, saving memory
def __new__(cls, arr: array): # __new__ receives the class, not an instance
return super().__new__(cls, 'd', np.ediff1d(arr)) # You must return the new instance created by delegating to parent,
# passing all the arguments it expects

完成后,您的预期结果就产生了:

>>> a = array.array('d', [1.0, 2.0, 3.14])
>>> diff_rle_array(a)
diff_rle_array('d', [1.0, 1.1400000000000001])

关于python - 为什么我的继承自 array.array 的类不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68202625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com