2012-08-16 5 views
3

En Python, si j'ai un objet, par exemple x, alors comment puis-je créer un nouvel objet y afin que x et y sont de la même classe?Créer une nouvelle instance d'une classe donnée une instance en Python

En Java, le code que je veux ressemblerait à quelque chose comme ceci:

Object y = x.getClass().newInstance(); 
+0

Gardez à l'esprit que la classe est un concept souple en Python, compte tenu de la possibilité d'utiliser les méta-classes personnalisées et descripteurs. Le type – Antimony

Répondre

4

Vous pourriez probablement faire quelque chose comme:

y = x.__class__() 

ou

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

Et, si vous Vous vous demandez comment faire une nouvelle classe de style, tout ce que vous devez faire est d'hériter de object (ou utiliser python 3.x)

+0

ne fonctionnera pas pour les classes de style ancien. En outre, cela ne fonctionnera probablement pas pour les métaclasses. – Antimony

+1

Merci pour le commentaire sur les anciennes classes de style (je * ne * les utilise jamais, donc je n'y ai pas pensé.) En ce qui concerne 'metaclass'es, je ne les utilise pas non plus, donc je ne peux pas aider avec celui-là. Il est bon de savoir où ma solution pourrait échouer. Merci d'avoir signalé cela aussi. – mgilson

+0

Je ne vois pas pourquoi il y a un problème avec les métaclasses. Le problème pour moi est que vous appelez le constructeur sans arguments et il peut en avoir besoin. – JBernardo

2

À peu près les mêmes que dans Java:

y = x.__class__() 
Questions connexes