2011-12-09 1 views
2

Lors du rechargement de modules python, ce n'est pas difficile et vous assurer que les nouveaux objets utiliseront le nouveau code, le problème concerne les objets existants.Comment mettre à niveau des objets Python après le rechargement du module?

Est-il possible de mettre à niveau des objets existants afin qu'ils utilisent le nouveau code? Nous pouvons supposer que nous savons quelles classes ont été modifiées.

Néanmoins, il est possible que certaines fonctionnalités supplémentaires aient été ajoutées à __init__(), il ne suffit donc pas de copier leurs dictionnaires. Une solution possible que j'ai considéré était de s'assurer que ces objets peuvent être améliorés en faisant quelque chose comme obj = MyClass(obj), ce qui signifie que __init__ devrait être écrit de telle manière qu'il ne serait pas cassé s'il est appelé plusieurs fois.

Répondre

3

La solution que vous envisagez est parfaitement raisonnable, mais je suggère d'ajouter une méthode statique pour créer une version mise à jour de l'objet au lieu d'ajouter la fonctionnalité supplémentaire à __init__(). Prenons l'exemple suivant:

class Point(object): 
    def __init__(x, y): 
     self.x = x 
     self.y = y 

    @staticmethod 
    def init_from_point(obj): 
     return Point(obj.x, obj.y) 

Avec cela, vous pouvez faire obj = Point.init_from_point(obj) pour votre mise à jour, sans compliquer votre __init__() du tout.

Questions connexes