Question

En Python, existe-t-il un moyen de créer une classe, puis de créer une deuxième version de cette classe avec des données identiques, mais qui peut être modifié, puis reconverti pour être identique à la donnée de la classe d'origine?

Je ferais donc une classe avec les nombres 1 à 5 comme données, puis une seconde classe avec les mêmes noms pour les sections (ou très similaire). Déranger avec les numéros de la deuxième classe, puis avec une fonction, puis les réinitialiser pour qu'ils soient identiques à ceux de la première classe.

La seule alternative que j'ai trouvée consiste à créer une classe extrêmement longue contenant trop de données séparées pour qu'elle soit facilement utilisable.

Était-ce utile?

La solution

Une classe est un modèle, elle vous permet de créer un plan directeur. Vous pouvez ensuite avoir plusieurs instances d'une classe, chacune avec des numéros différents, comme suit.

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()

Autres conseils

Voici une autre réponse un peu comme celle de pobk; il utilise le dict de l'instance pour sauvegarder / réinitialiser les variables, mais ne vous oblige pas à en spécifier le nom dans votre code. Vous pouvez appeler save () à tout moment pour sauvegarder l'état de l'instance et reset () pour rétablir 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 la meilleure / seule façon.

Les classes n'ont pas de valeurs. Les objets font. Ce que vous voulez est-il fondamentalement une classe pouvant réinitialiser une instance (objet) en un ensemble de valeurs par défaut?

Pourquoi ne pas simplement fournir une méthode de réinitialisation, qui réinitialise les propriétés de votre objet à la valeur par défaut?

Je pense que vous devriez simplifier votre question ou nous dire ce que vous voulez vraiment faire. Ce n'est pas du tout clair.

Je pense que vous êtes confus. Vous devez vérifier à nouveau la signification de & class; class " et "instance".

Je pense que vous essayez tout d'abord de déclarer une instance d'une certaine classe, puis une instance d'une autre classe, d'utiliser les données de la première, puis de trouver un moyen de convertir les données dans la seconde instance et d'utiliser en première instance ...

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

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__()

Juste pour votre information, voici une autre implémentation ... viole probablement environ 15 millions de règles pythoniques, mais je la publie par 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top