我是python的新手并在课堂上尝试。我理解__init__
和__new__
之间的区别。这是我班级的片段,
class Vector2D:
def __new__(cls):
print "Testing new"
return super(Vector2D,cls).__new__(cls)
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "X:" + str(self.x) + ",Y:" + str(self.y)
我正在初始化类,如下所示,并期望首先打印“Testing new”:
def Main():
vec = Vector2D(1,2)
print "Printing vec:",vec
但我只得到输出,
Printing vec: X:1,Y:2
我需要在方法__new__()
中为要测试的“测试新”做些什么?
谢谢。
答案 0 :(得分:6)
您必须使Vector2D
类成为object
的子类,否则许多事情将无法正常工作。不起作用的内容包括__new__
和super
。
这应该可以正常工作:
class Vector2D(object):
def __new__(cls, *args, **kw):
print "Testing new"
return super(Vector2D,cls).__new__(cls)
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return "X:" + str(self.x) + ",Y:" + str(self.y)
请注意,构造实例时使用的参数都会传递给__new__
和__init__
,因此您必须准备好在__new__
中接受它们,但是您的超类({{ 1}})在object
方法中不接受任何参数,因此不要将它们传递给链。