Python __新的\uuuuu在正确的类时不调用\uuuu init

Python __新的\uuuuu在正确的类时不调用\uuuu init,python,pickle,Python,Pickle,我有一个类Vertex() 采用以下方法: def __new__(cls, pos_x, pos_y, size_x, size_y, text): instance = super(Vertex, cls).__new__(cls) #print 'variables {0}, {1}, {2}, {3}, {4}'.format(pos_x, pos_y, size_x, size_y, text) #print instance.__cla

我有一个类
Vertex()

采用以下方法:

def __new__(cls, pos_x, pos_y, size_x, size_y, text):
        instance = super(Vertex, cls).__new__(cls)
        #print 'variables {0}, {1}, {2}, {3}, {4}'.format(pos_x, pos_y, size_x, size_y, text)
        #print instance.__class__.__name__

        return instance

def __init__(self, pos_x=None, pos_y=None, size_x=None, size_y=None, text=None):
        print 'init'
        super(Vertex, self).__init__()
在另一个类的方法中,我有以下调用:

self.vertices[touch.uid] = Vertex(pos_x=self.bounds[3][0], pos_y=self.bounds[2][1], size_x=self.bounds[1][0] - self.bounds[3][0], size_y= self.bounds[0][1] - self.bounds[2][1], text=None)
其行为符合预期,并通过调用
\uuuu new\uuuuu()
\uuu init\uuuu()


但是,当我取消勾选
Vertex()
时,将调用
\uuuuuu new\uuuuuuuuu()
方法,但不会调用
\uuuuuu init\uuuuuuuuuu()
方法。我检查了,在取消勾选时,实例的类是
Vertex
,据我所知,应该调用
\uuu init\uuu()

在恢复对象时,故意取消勾选不会调用
\uu init\uuu
。它创建一个新的“空”对象(使用
\uuuuu new\uuuuu
),然后将状态重新应用于该对象

您可以通过实现
\uuuuu getinitargs\uuuuu
(告诉Pickle无论如何都要调用
\uuuuuu init\uuuu
,使用给定的参数)或挂接到
\uuuuu setstate\uuuuu

def __setstate__(self, state):
    self.__dict__.update(state)
    # do other things that need to be set on unpickling.

不,故意取消勾选不会调用
\uuuuu init\uuuu
;您正在重新安装实例,而不是创建新实例。如果我需要运行
\uuu init\uuu()
中的代码,那么解决此问题的最佳方法是什么
\uuuu setstate\uuuuuuuuuuuuuuuuuuuuuu()
?或者更确切地说,创建了一个新实例,但它是用未点击的对象“初始化”的,而不是它自己的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。它的状态已还原。@MartijnPieters最终,我有一些子对象需要重新创建(它们不能与pickle一起使用),这就是为什么我需要
\uuuu init\uuuu()
中的代码,我尝试使用
\uu getinitargs\uuuuu()
但没有成功。当我使用pickle.HIGHEST_协议时
我的理解是这不会被调用。至少可以说是非常混乱。。。我最终使用了
\uuuu getstate\uuuuuuuuuu()
/
\uuuuuu setstate\uuuuuuuuuuuu()
的组合,并删除了
\uuuuuuuuuu newargs\uuuuuuuuuuuu()
。我在
\uuu setstate\uuu()
中调用了
self.\uuu init\uuuu()
,以获得所需的效果。