Занятия на Python - PullRequest
       10

Занятия на Python

1 голос
/ 15 сентября 2008

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

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

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

Ответы [ 6 ]

5 голосов
/ 15 сентября 2008

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

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()
2 голосов
/ 17 сентября 2008

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

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

1 голос
/ 15 сентября 2008

Просто к вашему сведению, вот альтернативная реализация ... Вероятно, нарушает около 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
1 голос
/ 15 сентября 2008
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 голос
/ 15 сентября 2008

Я думаю, что вы в замешательстве. Вы должны перепроверить значение «class» и «instance».

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

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

1 голос
/ 15 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...