在Python中,基于一个实例创建一个新的类实例

4
在Python中,如果我有一个对象,比如说x,那么我该如何创建一个新对象y,使得xy属于同一类?在Java中,我想要的代码看起来会像这样:
Object y = x.getClass().newInstance();

请记住,在Python中,类是一个灵活的概念,因为可以使用自定义元类和描述符。 - Antimony
2个回答

5

您可以尝试以下方法:

y = x.__class__()

或者
y = type(x)()  #New style classes only

如果你想创建一个新的样式类,只需要继承自object(或使用Python 3.x)即可。


类型对于旧式类不起作用。而且,这可能对元类也不起作用。 - Antimony
1
感谢您对旧式类的评论(我从不使用它们,所以我没有想到这一点)。至于元类,我也不使用它们,所以无法帮助解决这个问题。不过,知道我的解决方案可能失败的地方还是很好的。感谢您指出这一点。 - mgilson
我不明白为什么元类会有问题。对我来说,问题在于您调用构造函数时没有传递参数,而它可能需要一些参数。 - JBernardo
与OP的问题类似,这假定构造函数不需要参数。 - martineau
@JBernardo -- 当然,这里假设__init__没有接收到任何参数(除了必须的self)。我想你在Java中也会遇到同样的问题吧? - mgilson
我假设Java会创建该类的原始对象(未初始化),因为如果它被初始化,可能会使用关键字“new”(我不是Java专家)。 - JBernardo

2

与Java基本相同:

y = x.__class__()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接