Классы на Python

В Python есть ли способ создать класс, а затем создать вторую версию этого класса с идентичным dat, но который можно изменить, а затем вернуть к тем же данным, что и данные в исходном классе?

Поэтому я бы создал класс с числами от 1 до 5 в качестве данных в нем, а затем создал бы второй класс с такими же именами для разделов (или очень похожими). Поиграйте с числами во втором классе, затем с одной функцией, затем сбросьте их, чтобы они были такими же, как в первом классе.

Единственная альтернатива, которую я нашел, - это сделать один неприятно длинный класс со слишком большим количеством отдельных фрагментов данных, чтобы его можно было легко использовать.

Спасибо за ответы, teifion дал ответ, который я искал в msn. Мой вопрос был непонятен. По сути, «Является ли то, что вы хотите в основном классом, который может сбрасывать экземпляр (объект) до набора значений по умолчанию?» Да, это было так.

leachrode 15.09.2008 20:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 046
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Класс - это шаблон, он позволяет вам создать план, затем вы можете иметь несколько экземпляров класса, каждый с разными номерами, например.

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

У классов нет значений. Объекты делают. Является ли то, что вы хотите, в основном классом, который может сбрасывать экземпляр (объект) до набора значений по умолчанию?

Как насчет того, чтобы просто предоставить метод сброса, который сбрасывает свойства вашего объекта до значений по умолчанию?

Я думаю, вам следует упростить свой вопрос или рассказать нам, чем вы действительно хотите заниматься. Это совсем не понятно.

Проголосовали против: в Python классы ДОЛЖНЫ иметь атрибуты (значения). У экземпляров также есть атрибуты (значения). Это очень важное различие, которое необходимо понимать при переходе на Python с другого языка.

gahooa 18.02.2009 21:39

Я думаю, вы запутались. Вам следует еще раз проверить значение слов «класс» и «экземпляр».

Я думаю, вы пытаетесь сначала объявить экземпляр определенного класса, а затем объявить экземпляр другого класса, использовать данные из первого, а затем найти способ преобразовать данные во втором экземпляре и использовать его на первый случай...

Я рекомендую вам использовать перегрузку оператора для назначения данных.

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 миллионов питонических правил, но я публикую ее для информации / наблюдения:

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

Вот еще один ответ вроде побка; он использует 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

почему ты хочешь сделать это? Возможно, это не лучший / единственный способ.

Другие вопросы по теме