我有一个奇怪的子类numpy.ndarray问题,感觉像
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
# {}

解决方法

问题在这里:
def __new__(cls,attrs={})

不要在函数头中这样做attrs = {}.预期的结果是(可能)不是你认为的.这是一个常见的Python陷阱.见这里Default Parameter Values in Python

正确的方法如何做到这一点:

def __new__(cls,attrs=None):
    if attrs is None:
        attrs = {}

python – numpy数组子类在每个实例之间共享属性的更多相关文章

  1. swift 字符串创建类

    先看个OC的swift

  2. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  3. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  4. python类名和类方法cls修改类变量的值

    这篇文章主要介绍了python类名和类方法cls修改类变量的值,通过类对象是无法修改类变量的值的,本质其实是给类对象新添加 name 和 age 变量,下文更多的相关介绍需要的小伙伴可任意参考一下

  5. Python类的定义和使用详情

    这篇文章主要介绍了Python类的定义和使用详情,在Python中,类表示具有相同属性和方法的对象的集合,文章围绕主题相关资料展开更多的相关介绍,需要的小伙伴可以参考一下

  6. 可以选择()与Windows下的Python文件一起使用吗?

    我试图在Windows下运行以下python服务器:我收到错误消息(10038,’尝试对非套接字的操作’).这可能与python文档中的theremark有关,“Windows上的文件对象是不可接受的,但套接字是.在Windows上,底层的select()函数由WinSock库提供,并且不处理不具有的文件描述符来自WinSock.“在互联网上有很多关于这个主题的帖子,但它们对我来说太技术或者根本不

  7. 如何在Windows中使用golang清除控制台?

    我尝试了很多方法,比如和并且转义序列也不起作用所有你需要的是:

  8. Windows上的Python多处理RuntimeError

    我有一个类函数(让我们称之为“alpha.py”),它使用多处理(processes=2)来分叉一个进程,并且是我编写的Python包的一部分.在一个单独的Python脚本中(我们称之为“beta.py”),我从这个类中实例化了一个对象并调用了使用多处理的相应函数.最后,所有这些都包含在一个包装Python脚本(让我们称之为“gamma.py”)中,它处理许多不同的类对象和函数.实质上:>从命令行

  9. 如何在没有pywin32的情况下使用python确定Windows上的文件所有者

    我正在编写一个脚本,需要确定Windows上文件所有者的用户名.虽然我发现了asolutionusingpywin32,但我对使用它犹豫不决,因为我不想添加模块依赖.该脚本将为python2.6编写,并且必须在32位和64位平台上运行.我想知道是否有不同的方法,可能有ctypes,来确定这些信息下面使用ctypes调用GetNamedSecurityInfo.最初它跟随问题中链接的codesnip

  10. 通过PHP代码打印Python输出

    您可以添加一点sleep,以免超载您的服务器.如果您正在使用网页,您可以使用AJAX定期重新加载页面的相关部分.希望这可以帮助你.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部