2008-09-15 8 views
1

En Python, est-il possible de créer une classe, puis de créer une seconde version de cette classe avec la même donnée, mais qui peut être modifiée, puis restaurée pour être identique aux données de la classe d'origine?Classes en Python

Donc, je voudrais faire une classe avec les chiffres 1 à 5 comme les données, puis faire une deuxième classe avec les mêmes noms pour les sections (ou très similaire). Le désordre avec les nombres dans la deuxième classe puis avec une fonction puis les réinitialiser pour être le même que dans la première classe.

La seule alternative que j'ai trouvée est de faire une classe de façon aggravante long avec trop de morceaux de données distincts pour être facilement utilisable.

+0

Merci pour vos réponses, teifion a donné la réponse que je cherchais sur msn. Ma question n'était pas claire. "Est ce que vous voulez essentiellement une classe qui peut réinitialiser une instance (objet) à un ensemble de valeurs par défaut?" oui c'était. – leachrode

Répondre

5

Une classe est un modèle, elle vous permet de créer un plan, vous pouvez alors avoir plusieurs instances d'une classe chacune avec des nombres différents, comme ça.

class dog(object): 
    def __init__(self, height, width, lenght): 
     self.height = height 
     self.width = width 
     self.length = length 

    def revert(self): 
     self.height = 1 
     self.width = 2 
     self.length = 3 

dog1 = dog(5, 6, 7) 
dog2 = dog(2, 3, 4) 

dog1.revert() 
1

Les classes n'ont pas de valeurs. Les objets le font. Est ce que vous voulez essentiellement une classe qui peut réinitialiser une instance (objet) à un ensemble de valeurs par défaut?

Que diriez-vous juste de fournir une méthode de réinitialisation, qui réinitialise les propriétés de votre objet à ce qui est la valeur par défaut? Je pense que vous devriez simplifier votre question, ou dites-nous ce que vous voulez vraiment faire. Ce n'est pas clair du tout.

+3

Eliminé: En Python, les classes DO ont des attributs (valeurs). Les instances ont également des attributs (valeurs). C'est une distinction très importante à comprendre lorsqu'on passe d'une autre langue à Python. – gahooa

1

Je pense que vous êtes confus. Vous devriez revérifier la signification de "class" et "instance".

Je pense que vous essayez de déclarer d'abord une instance d'une certaine classe, puis de déclarer une instance d'une autre classe, utilisez les données du premier, puis trouvez un moyen de convertir les données dans la seconde instance et utilisez-le sur la première instance ...

Je vous recommande d'utiliser la surcharge de l'opérateur pour affecter les données.

1
class ABC(self): 
    numbers = [0,1,2,3] 

class DEF(ABC): 
    def __init__(self): 
     self.new_numbers = super(ABC,self).numbers 

    def setnums(self, numbers): 
     self.new_numbers = numbers 

    def getnums(self): 
    return self.new_numbers 

    def reset(self): 
    __init__() 
1

Juste Pour votre information, voici une autre implémentation ... constitue une violation probablement environ 15 millions de règles pythonique, mais je le publie par l'information/observation:

class Resettable(object): 
    base_dict = {} 
    def reset(self): 
      self.__dict__ = self.__class__.base_dict 

    def __init__(self): 
      self.__dict__ = self.__class__.base_dict.copy() 

class SomeClass(Resettable): 
    base_dict = { 
      'number_one': 1, 
      'number_two': 2, 
      'number_three': 3, 
      'number_four': 4, 
      'number_five': 5, 
    } 
    def __init__(self): 
      Resettable.__init__(self) 


p = SomeClass() 
p.number_one = 100 
print p.number_one 
p.reset() 
print p.number_one 
2

est ici un autre type de réponse comme pobk de; il utilise le dict de l'instance pour effectuer le travail de sauvegarde/réinitialisation des variables, mais ne vous oblige pas à en spécifier le nom dans votre code. Vous pouvez appeler save() à tout moment pour enregistrer l'état de l'instance et reset() pour réinitialiser cet état.

class MyReset: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
     self.save() 

    def save(self): 
     self.saved = self.__dict__.copy() 

    def reset(self): 
     self.__dict__ = self.saved.copy() 

a = MyReset(20, 30) 
a.x = 50 
print a.x 
a.reset() 
print a.x 

Pourquoi voulez-vous faire cela? Ce n'est peut-être pas le meilleur/seul moyen.