估计是,反正我这边也是这样的,多传参数报错
Python3.3以上版本调用__new__()的时候,不要带参数。调用的时候改成__new__(cls)就不报错了。同时重写__init__和__new__时避免传递额外的参数,若只重写其中一个则可以传递额外参数。
把这句改为
错误提示是缩进问题
print programmer.__dict__
代码最后一行的__dict__,因为原本的__init__方法还没有执行。因此此时只是执行了实例化的第一步__new__,通过下面dir语句可以看出此时没有__init__过的对象确实没有成员变量(属性)。
print dir(programmer)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
print programmer.__init__
最后一句改为上面__init__将会成功打印出对象的属性
我在python2.7上正常,python3.5出现了以上的问题。
如何修复:
return super(Programer,cls).__new__(cls, *args, **kwargs)
修改为:
return super(Programer,cls).__new__(cls)
这里讲的很清楚:
http://stackoverflow.com/questions/34777773/typeerror-object-takes-no-parameters-after-defining-new