我已经搜索过,但却无法得到答案。我想要一个简单的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__
。
答案 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
答案 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
这不完全是你的问题,但可能会提出如何进一步挖掘的想法。