DeprecationWarning:object .__ init __()不带参数

时间:2015-11-29 16:38:09

标签: python sympy

我已经搜索过,但却无法得到答案。我想要一个简单的Matrix子类来与特定的维度交流。当我在python 2.7中运行此代码时:

from sympy import *
class JVec(Matrix):
    def __init__(self, *args):
        super(JVec,self).__init__(*args)
        #Matrix.__init__(self, *args)
        if self.shape != (2,1):
            raise TypeError("JVec: shape must be (2,1)")
a = JVec([1,0])

我收到错误

/Users/me/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:4: 
DeprecationWarning: object.__init__() takes no parameters

无论我是否按原样使用代码,我都会得到相同的错误,或者替换我注释掉的行中的__init__

2 个答案:

答案 0 :(得分:3)

问题产生于调用super(JVec,self).__init__(*args)会找到由__init__定义的object这一事实,因为这两个基类都没有定义__init__方法。

sympy的代码正在使用a different mechanism来创建新实例。你应该重新编写你的函数:

class JVec(Matrix):
    def __new__(cls, *args):
        newobj = Matrix.__new__(cls, *args)
        if newobj.shape != (2, 1):
            raise TypeError("JVec: shape must be (2,1)")
        return newobj

这是基于creating the RayTransferMatrix instances的方式。

答案 1 :(得分:0)

我可以使用以下内容生成error消息:

>>> class Foo(object):
...    def __init__(self,*args):
...        super(Foo,self).__init__(*args)
... 
>>> Foo()
<__main__.Foo object at 0xb744370c>
>>> Foo('one')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
TypeError: object.__init__() takes no parameters

这不完全是你的问题,但可能会提出如何进一步挖掘的想法。