Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
numpy子类将不接受pythonically继承类中的_unew_uu的参数_Python_Inheritance_Numpy_Attributeerror_Default Arguments - Fatal编程技术网

numpy子类将不接受pythonically继承类中的_unew_uu的参数

numpy子类将不接受pythonically继承类中的_unew_uu的参数,python,inheritance,numpy,attributeerror,default-arguments,Python,Inheritance,Numpy,Attributeerror,Default Arguments,我创建了一个名为“Parray”的ndarray子类,它接受两个参数:p和维度。它本身工作得很好。现在,我想创建一个名为SirPlotsAlot的类,它继承了Parray,而不需要所有花哨的new和array\u finalize等 import numpy as np class Parray(np.ndarray): def __new__(self, p = Parameters(), dimensionality = 2): print "Initializi

我创建了一个名为“Parray”的ndarray子类,它接受两个参数:p和维度。它本身工作得很好。现在,我想创建一个名为SirPlotsAlot的类,它继承了Parray,而不需要所有花哨的newarray\u finalize

import numpy as np

class Parray(np.ndarray):
    def __new__(self, p = Parameters(), dimensionality = 2):

        print "Initializing Parray with initial dimensionality %s..." % dimensionality

        self.p = p # store the parameters

        if dimensionality == 2:
            shape = (p.nx, p.ny)
            self.pshape = shape
        elif dimensionality == 3:
            shape=(p.nx, p.ny, p.nx)
            self.pshape = shape
        else:
            raise NotImplementedError, "dimensionality must be 2 or 3"

        # ...Set other variables (ellided)

        subarr = np.ndarray.__new__(self, shape, dtype, buffer, offset, strides, order)
        subarr[::] = np.zeros(self.pshape) # initialize to zero
        return subarr
...

class SirPlotsAlot(Parray):
    def __init__(self, p = Parameters(), dimensions = 3):
        super(SirPlotsAlot, self).__new__(p, dimensions)     # (1)
程序中的对象通过来回传递对象p=parameters()来共享参数集

现在,当我键入(文件是auxiliary.py)时:

希望得到一个很好的“初始维度为3的初始阵列”,我得到的是“2”。但如果我输入:

import auxiliary
s = auxiliary.SirPlotsAlot()
我明白了

它认为“p”是一个int,而事实并非如此。如果我玩弄它,我会得到很多奇怪的看似无关的错误。它认为的整数是“2”。我完全迷路了

我试过有或没有#(1)评论(超级电话)


游戏中的其他错误包括“AttributeError:'list'对象没有属性'p'”,“TypeError:new()只接受2个参数(1个给定)”,“ValueError:需要超过0个值才能解包”(我用*args替换了new,这是我不太了解的内容)。

我将回显kindall,并说“不要使用
\uuuuu new\uuuuu
”。你的
Parray.\uuuuu new\uuuuu
方法看起来更像是一个初始化,应该像它的子类一样使用
\uuuuu init\uuuuuu

已经十年了,我早就离开了这个项目,但我通过创建助手函数来创建新类并设置它们,从而解决了这个问题。在下面的代码示例中,请参见文件底部的定义。我进口并使用了这些

Matthew Schinckel的道具,指出
\uuuu new\uuuu
应该在
\uuuuu init\uuuuu
运行时已经被调用,并向其他所有人表示他们的想法

#-*-编码:utf-8-*-
"""
Era的绘图功能。此模块导出SirPlotsAlot和公司:
类SirPlotsAlot:具有二维、三维动画打印功能的阵列,以及pyrism参数对象。
def NewSirPlotsAlot(p,维度):返回SirPlotsAlot,但不需要显式参数
def返回\u SirPlotsAlot:decorator强制ndarray返回函数返回SirPlotsAlot。
创建于2012年7月12日星期四18:46:15
@作者:时代
"""
#赛普洛萨洛特酒店
从mpl_toolkits.mplot3d导入Axes3D
将matplotlib.animation导入为动画
将matplotlib.pyplot导入为pyplot
将numpy作为np导入
将scipy导入为scipy
导入日志记录
lprint=logging.getLogger('pyrism')
SirPlotsAlot类(np.Ndaray):
"""
具有2D、3D、动画打印功能的阵列和pyrism参数对象。
继承:numpy的Ndaray
输入:
维度:整数。数据数组的维度。可以稍后更改。
p:参数对象。
"""
#类变量
currentSlice=0 35;用于_更新切片和动画打印
定义新(cls,形状):
"""
创建一个新的SirPlotsAlot供我们使用。
SirPlotsAlot继承了ndarray。ndarray是用C编写的,需要额外的\
方法调用uuu new_uuu来帮助它。
Args:
形状:整数的元组。底层数据数组的形状。
返回:
混乱
作者/日期:
伊拉斯谟阿卡林/2012年1月23日
伊拉斯谟阿卡林/2012年7月13日
"""
###指定此类实现的数组的确切参数
dtype=float#dtype:数据类型。可选的
#任何对象都可以解释为
#numpy数据类型
buffer=None#buffer:对象公开缓冲区接口。可选的
#用于用数据填充数组
偏移量=0#偏移量:整数。可选。
#数据缓冲区中数组的偏移量
步幅=无#步幅:整数的元组。可选的
#内存中数据的步幅
顺序=无#顺序:{'C','F'}。可选的
#行主顺序或列主顺序。
#实例化新的ndarray(此类)。暂时称为sub_数组。
Subar=np.ndarray.uuu new_uuuu(cls),cls是至关重要的。
#它创建了一个
#他属于这一类
#而不是Ndaray类型
形状、数据类型、缓冲区、偏移量、跨步、顺序)
#返回此类要使用的已成功创建的实例!
返回子雷达
定义初始(自我,形状):
“你好!
Args:
形状:整数的元组。底层数据数组的形状。
返回:
没有一个
作者:
伊拉斯谟阿卡林/2012年1月23日
伊拉斯谟阿卡林/2012年7月13日
"""
调试(“啊,善良的先生!你的命令完成了!”)
def _;阵列_;最终确定___;(自身,obj):
“”“允许继承ndarray的一元(?)操作。”。
目的:ndarray有很多功能,可以让您进行交互
有了它(所有令人敬畏的功能,特别是视图)
以及所谓的“新自模板”:即切片)。
这个函数告诉python我们的类也可以
使用所有这些漂亮的“一元”功能!
Args:
obj:另一个对象。例如,如果我们键入
myArr=myIntensityMap[1:]
(myArr是obj,myIntensityMap是self)
返回:
没有一个
作者/日期:
伊拉斯谟阿卡林/2012年1月23日
"""
如果obj为无:返回
def__阵列_
import auxiliary
s = auxiliary.SirPlotsAlot()
---> 67             shape = (p.nx, p.ny)
"AttributeError: 'int' object has no attribute 'nx'"