在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
答案 0 :(得分:2)
不,这是不可能的,因为__init__
方法的参数可能已被丢弃,用于计算其他值,或以多种不同方式保存,这些方法无法创建通用方法检索。
但是,您可以使用the Factory pattern从预设的可配置参数实现灵活的对象初始化,并且可以使用copy.deepcopy
复制现有对象。 (但是,请注意,深度复制存在边缘情况,因此在使用时要小心,并确保阅读文档)