Вопрос
В Python есть ли какой-либо способ создать класс, а затем создать вторую версию этого класса с идентичными данными, но которые могут быть изменены, а затем возвращены к тем же данным, что и в исходном классе?
Итак, я бы создал класс с номерами от 1 до 5 в качестве данных в нем, затем создал бы второй класс с теми же названиями разделов (или очень похожими).Повозитесь с числами во втором классе, затем с одной функцией, затем сбросьте их, чтобы они были такими же, как в первом классе.
Единственная альтернатива, которую я нашел, - это создать один невыносимо длинный класс со слишком большим количеством отдельных фрагментов данных в нем, чтобы его можно было легко использовать.
Решение
Класс - это шаблон, он позволяет вам создать схему элементов, после чего у вас может быть несколько экземпляров класса, каждый с разными номерами, вот так.
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()
Другие советы
Вот еще один ответ, похожий на ответ pobk;он использует dict экземпляра для выполнения работы по сохранению / сбросу переменных, но не требует, чтобы вы указывали их имена в своем коде.Вы можете вызвать save() в любое время, чтобы сохранить состояние экземпляра, и reset(), чтобы вернуться к этому состоянию.
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
Почему ты хочешь это сделать?Возможно, это не самый лучший / единственный способ.
Классы не имеют значений.Объекты делают это.Это то, что вам нужно в основном, класс, который может сбросить экземпляр (объект) к набору значений по умолчанию?
Как насчет того, чтобы просто предоставить метод сброса, который сбрасывает свойства вашего объекта на значения по умолчанию?
Я думаю, вам следует упростить свой вопрос или рассказать нам, что вы действительно хотите сделать.Это совсем не ясно.
Я думаю, вы в замешательстве.Вам следует еще раз проверить значение терминов "класс" и "экземпляр".
Я думаю, вы пытаетесь сначала объявить экземпляр определенного класса, а затем объявить экземпляр другого класса, использовать данные из первого, а затем найти способ преобразовать данные во втором экземпляре и использовать их в первом экземпляре...
Я рекомендую вам использовать перегрузку оператора для назначения данных.
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__()
Просто К вашему сведению, вот альтернативная реализация...Вероятно, нарушает около 15 миллионов правил pythonic, но я публикую это в соответствии с информацией / наблюдением:
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