在python中使用__new__

时间:2016-03-03 11:27:15

标签: python python-2.7

我是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__()中为要测试的“测试新”做些什么?

谢谢。

1 个答案:

答案 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方法中不接受任何参数,因此不要将它们传递给链。