无法深度复制同时定义了__init__和__new__的类

问题描述 投票:1回答:2

我(在我看来)有一个有点奇怪的问题。我在下面定义了同时定义了initnew的类:

class Test:

    def __init__(self, num1):
        self.num1 = num1

    def __new__(cls, *args, **kwargs):
        new_inst = object.__new__(cls)
        new_inst.__init__(*args, **kwargs)
        new_inst.extra = 2
        return new_inst

如果正常使用,效果很好:

test = Test(1)
assert test.extra == 2

但是,它不会复制。Deepcopy:

import copy
copy.deepcopy(test)

给予

TypeError: __init__() missing 1 required positional argument: 'num1'

这可能与Decorating class with class wrapper and __new__有关-我无法确切看到,但我在这里尝试类似的事情-我需要new将类包装器应用于创建的Test实例。] >

非常感谢收到任何帮助!

我(在我看来)有一个有点奇怪的问题。我在下面定义了一个具有init和new定义的类:类测试:def __init __(self,num1):self.num1 = num1 def ...

python copy new-operator python-internals
2个回答
2
投票

[从技术上讲,从__init__调用__new__并不是问题,但是当__init__返回实例后会自动发生对__new__的调用,这是多余的。


0
投票

OK-这是因为我做错了-我不应该从new

© www.soinside.com 2019 - 2024. All rights reserved.