我读过一篇关于__new__()
在stackoverflowInheritance when __new__() doesn't return instance of class上不返回类的实例的文章,我知道这个问题是针对python3的。正如Martijn Pieters所说,它可以通过name mangling来完成,并直接在类中手动调用它,然后在类中初始化它。在
我想用python2.7.12试试。第一种和第二种方法我可以处理,但第三种方法会产生TypeError
。在
这是我的代码,第一次尝试:
class A:
def __new__(cls, p1, p2):
self = object.__new__(cls)
self.p1 = p1
self.p2 = p2
return [self]
class B(A):
def __new__(cls, p3):
self = super(B,cls).__new__(cls,1,2)
self[0].p3 = p3
return self
这给了我TypeError: super() argument 1 must be type, not classobj
第二次尝试:
^{pr2}$这给了我TypeError: __new__() takes exactly 2 arguments (1 given)
。在
为什么会发生这种情况,这是在Python2.7.12中实现的,还是这种技术不兼容?在
在第一次尝试中,您传递的是一个旧样式的类对象,但是
super()
只接受新样式的类。在您需要从
object
继承以获得新样式的类,这是您在第二次尝试中正确地完成的。您只是在创建实例时忘了传递参数:您的错误告诉您,}被传入。在
B.__new__
需要两个参数,但只有{相关问题 更多 >
编程相关推荐