我基本上已经搞清楚了。唯一无法克服的问题是知道所有类的一组可接受的初始化参数(用于__init__的参数)。所以我必须做出以下两个假设:
1)我有一组类C的默认参数,我称之为argsC。
2) C中的所有对象都可以用空参数初始化。
那样的话我可以
首先:
从要复制的类实例初始化该类的新实例C:c_copy = c.__class__(**argsC)
秒:
检查c的所有属性,并将属性c_copy设置为c的属性的副本for att in c.__dict__:
setattr(c_copy, att, object_copy(getattr(c,att)))
其中object_copy是我们正在构建的函数的递归应用程序。
最后一个:
删除c_copy中但不在c中的所有属性:for att in c_copy.__dict__:
if not hasattr(c, att):
delattr(c_copy, att)
把这些放在一起我们有:import copy
def object_copy(instance, init_args=None):
if init_args:
new_obj = instance.__class__(**init_args)
else:
new_obj = instance.__class__()
if hasattr(instance, '__dict__'):
for k in instance.__dict__ :
try:
attr_copy = copy.deepcopy(g