Pergunta

Em Python, existe alguma maneira de criar uma classe e, em seguida, criar uma segunda versão dessa classe com dados idênticos, mas que podem ser alterados e depois revertidos para serem iguais aos dados da classe original?

Então, eu faria uma classe com os números de 1 a 5 como dados e, em seguida, faria uma segunda classe com os mesmos nomes para as seções (ou muito semelhantes).Mexa com os números da segunda classe, depois com uma função e depois redefina-os para serem iguais aos da primeira classe.

A única alternativa que encontrei é criar uma classe extremamente longa com muitos dados separados para ser facilmente utilizável.

Foi útil?

Solução

Uma classe é um modelo, permite criar um projeto, você pode então ter várias instâncias de uma classe, cada uma com números diferentes, assim.

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

Outras dicas

Aqui está outra resposta parecida com a de pobk;ele usa o dict da instância para fazer o trabalho de salvar/redefinir variáveis, mas não exige que você especifique os nomes delas em seu código.Você pode chamar save() a qualquer momento para salvar o estado da instância e reset() para redefinir esse estado.

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

Por que você quer fazer isso?Pode não ser a melhor/única maneira.

As aulas não têm valores.Os objetos sim.O que você deseja é basicamente uma classe que possa redefinir uma instância (objeto) para um conjunto de valores padrão?

Que tal apenas fornecer um método de redefinição, que redefine as propriedades do seu objeto para o padrão?

Acho que você deveria simplificar sua pergunta ou nos dizer o que realmente deseja fazer.Não está nada claro.

Acho que você está confuso.Você deve verificar novamente o significado de "classe" e "instância".

Acho que você está tentando primeiro declarar uma instância de uma determinada classe, e depois declarar uma instância de outra classe, usar os dados da primeira e depois encontrar uma maneira de converter os dados na segunda instância e usá-los na primeira instância...

Eu recomendo que você use a sobrecarga do operador para atribuir os dados.

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

Apenas para sua informação, aqui está uma implementação alternativa ...Provavelmente viola cerca de 15 milhões de regras pitônicas, mas eu publico por informação/observação:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top