Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2374 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  .clone() ou __deepcopy__() ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

.clone() ou __deepcopy__() ?

n°2210363
suizokukan
Posté le 15-11-2013 à 14:31:01  profilanswer
 

S'agissant de la copie "profonde" d'un objet, qu'est-ce qui est le plus clair pour la lisibilité du code ? Pour chaque classe, définir une fonction clone() ou une fonction __deepcopy__() ?
 
Il me semble que __deepcopy__ serait peut-être plus conforme à l'esprit Python mais oblige à appeler copy.deepcopy(obj) qui masque l'existence de la fonction __deepcopy__() : après tout, si une telle fonction n'existe pas, Python bascule sur la fonction deepcopy() générique.
 
Avec une fonction .clone(), c'est l'inverse : l'existence de cette fonction saute aux yeux mais elle contourne le traditionnel appel à copy.deepcopy().
 
Qu'en pensez-vous ? Merci !


---------------
rule #1 : trust the python
mood
Publicité
Posté le 15-11-2013 à 14:31:01  profilanswer
 

n°2210402
fred1599
Posté le 15-11-2013 à 17:11:54  profilanswer
 

La lisibilité d'un code n'est pas en rapport avec le nom d'une méthode de classe.
 
la méthode __deepcopy__ , si elle est existante à un rôle bien déterminé, là modifier voudrait dire la surcharger et changer sa fonction naturelle, dans ce cas, je préfèrerais utiliser la méthode clone(...).
 
Dans le cas où la méthode __deepcopy__ n'existe pas pour l'objet, on peut naturellement l'ajouter et modifier l'état d'un objet, seulement attention, l'objet python n'utilisant pas cette méthode en mode standard veut sans doute dire quelque chose et dans ce cas, il est fort possible que la méthode que tu appelles __deepcopy__ ne fait pas la fonction qu'elle devrait faire. Ça serait dans ce cas une erreur de conception...

n°2210543
suizokukan
Posté le 18-11-2013 à 09:12:37  profilanswer
 

Merci pour cette réponse. En creusant la question, j'ai cru comprendre que .clone() était à utiliser à chaque fois que l'on travaillait sur un type connu, c'est-à-dire quasiment tout le temps, deepcopy() étant réservé au cas où l'on doit dupliquer un objet dans le type est mal connu, voire complètement inconnu. Je trouve cette distinction un peu curieuse pour Python où l'introspection permet d'avoir toutes les informations possibles mais j'imagine qu'il y a des cas (pickling ? projet trop gros et mal documenté ?) où deepcopy() est la seule méthode possible.


---------------
rule #1 : trust the python
n°2210577
fred1599
Posté le 18-11-2013 à 11:49:01  profilanswer
 

Bonjour,
 

Citation :

En creusant la question, j'ai cru comprendre que .clone() était à utiliser à chaque fois que l'on travaillait sur un type connu, c'est-à-dire quasiment tout le temps, deepcopy() étant réservé au cas où l'on doit dupliquer un objet dans le type est mal connu


 
Qui a dit cela ? Source ?
 

Citation :

Je trouve cette distinction un peu curieuse pour Python où l'introspection permet d'avoir toutes les informations possibles mais j'imagine qu'il y a des cas (pickling ? projet trop gros et mal documenté ?) où deepcopy() est la seule méthode possible.


 
Dans quelle application utiliseriez-vous __deepcopy__ ?
 

Citation :

j'ai cru comprendre que .clone() était à utiliser à chaque fois que l'on travaillait sur un type connu


 
Encore une fois, d'où vient tout ces dires ?
 
Quand on conçoit un code, qu'il est bien ficelé, tout est possible, même l'interdit, car ce qui compte c'est le besoin du client... Encore faut-il qu'il soit bien ficelé, c'est une autre paire de manches !

n°2210585
suizokukan
Posté le 18-11-2013 à 12:02:26  profilanswer
 

Bonjour - merci de vos réponses -
je me suis largement inspiré d'un poste (http://www.quora.com/Python-progra [...] -deep-copy) qui condamnait l'emploi de deepcopy().
 
Qu'en pensez-vous ?


---------------
rule #1 : trust the python
n°2210594
fred1599
Posté le 18-11-2013 à 12:49:47  profilanswer
 

L'utilisation de __deepcopy__ se généralise pour toutes les surcharges, on surcharge selon les besoins, mais à partir du moment où on hérite d'un objet connu, on fait attention à ce qu'on fait, car on dénaturalise l'objet et certaines méthodes pourraient être inutilisables, dans ce cas la solution souhaitée lors d'un héritage est la création d'une nouvelle méthode comme clone() par exemple...

 


Message édité par fred1599 le 18-11-2013 à 12:50:37

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  .clone() ou __deepcopy__() ?

 

Sujets relatifs
Problème sur FMyScript (clone de VDM)copy.copy(obj) vs obj.copy()
VBA - Acess - Clone d'un recordsetOn a cloné mon site :( Riposte ?
[javaw.exe]IL se clone et sature ma ram !!Problème avec clone !!!
[java] clone() [partielement resolu]clone(), dupliquer des instances pour du drag n drop
Space Geeks: un clone d'Elite (forum officiel ouvert)Un "clone" libre du présent forum :D
Plus de sujets relatifs à : .clone() ou __deepcopy__() ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR