使用相同的参数从另一个已实例化的对象创建新对象

时间:2017-05-02 23:33:40

标签: python

在python中是否可以从已经实例化的对象中重新创建一个对象,并将所有参数传递给__init__方法?

inspect.getcallargs类似,但对于类实例。

例如:

class A:
    def __init__(self, some_arg):
        self.some_arg = some_arg

def f(a):
    # somehow get all arguments from `a`, with which it was created
    # kwargs = ...?
    # and create a new instance of class with the same (or modified) args:
    return a.__class__(**kwargs)

a = A(100)
new_a = f(a)
print(new_a.some_arg)
>>> 100

1 个答案:

答案 0 :(得分:2)

不,这是不可能的,因为__init__方法的参数可能已被丢弃,用于计算其他值,或以多种不同方式保存,这些方法无法创建通用方法检索。

但是,您可以使用the Factory pattern从预设的可配置参数实现灵活的对象初始化,并且可以使用copy.deepcopy复制现有对象。 (但是,请注意,深度复制存在边缘情况,因此在使用时要小心,并确保阅读文档)