我有一个奇怪的子类numpy.ndarray问题,感觉像
Values of instance variables of superclass persist across instances of subclass
但是,为了我的例子,我还没有完全理解或使其工作.
Values of instance variables of superclass persist across instances of subclass
但是,为了我的例子,我还没有完全理解或使其工作.
阅读
Slightly more realistic example – attribute added to existing array我正在努力做到这一点.我想在数组中添加一个attrs属性来保存单词在字典中的信息.
这是我有的:
import numpy class dmarray(numpy.ndarray): def __new__(cls,input_array,attrs={}): obj = numpy.asarray(input_array).view(cls) obj.attrs = attrs return obj def __array_finalize__(self,obj): # see InfoArray.__array_finalize__ for comments if obj is None: return self.attrs = getattr(obj,'attrs',{})
所以然后用它来展示这个问题
a = dmarray([1,2,3,4]) b = dmarray([1,4]) a.attrs['foo'] = 'bar' print(b.attrs) #{'foo': 'bar'} b.attrs is a.attrs # True # hmm....
所以b正在拾起我不想要的attrs.令人烦恼的是,如果你这样做:
from datamodel import * a = dmarray([1,4],attrs={'foo':'bar'}) b = dmarray([1,4]) b.attrs # {}
那么在世界上,我如何使这个dmarray工作怎么样呢?
编辑:
好的,所以这似乎解决了问题,但我不明白为什么.所以我们可以将问题改为这是做什么以及为什么它的工作原理?
class dmarray(numpy.ndarray): def __new__(cls,attrs=None): obj = numpy.asarray(input_array).view(cls) return obj def __init__(self,attrs=None): if attrs == None: attrs = {} self.attrs = attrs
所以通过从__new __()中删除kwarg并将其放在__init __()中.我刚刚尝试过这个“好吧,它可能会工作”
a = dmarray([1,4]) a.attrs['foo'] = 'bar' b.attrs # {}
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。