在python中使用__new__

Ayu*_*ubx 5 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)
Run Code Online (Sandbox Code Playgroud)

我正在初始化类,如下所示,并期望首先打印"Testing new":

def Main():
    vec = Vector2D(1,2)
    print "Printing vec:",vec
Run Code Online (Sandbox Code Playgroud)

但我只得到输出,

Printing vec: X:1,Y:2
Run Code Online (Sandbox Code Playgroud)

__new__()在打印"测试新" 的方法中我该怎么做?

谢谢.

Dun*_*can 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)
Run Code Online (Sandbox Code Playgroud)

请注意,构造实例时使用的参数都被传递给__new__,__init__因此您必须准备接受它们__new__,但是您的超类(object)不会在其__new__方法中接受任何参数,因此不要将它们传递给链.