Python中的类

时间:2020-03-05 18:53:47  来源:igfitidea点击:

在Python中,有什么方法可以创建一个类,然后使用相同的dat,a来创建该类的第二个版本,但是可以对其进行更改,然后还原为与原始类中的数据相同?

因此,我将创建一个以数字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()

回答

类没有值。对象呢。我们基本上想要的是一个可以将实例(对象)重置为一组默认值的类吗?

仅提供一种重置方法,该方法会将对象的属性重置为默认值,该怎么办?

我认为我们应该简化问题,或者告诉我们我们真正想做什么。一点都不清楚。

回答

我觉得你很困惑。我们应该重新检查"类"和"实例"的含义。

我认为我们正在尝试先声明某个类的实例,然后声明其他类的实例,使用第一个类的数据,然后找到一种在第二个实例中转换数据并在第二个实例上使用它的方法。第一个例子...

我建议我们使用运算符重载来分配数据。

回答

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

回答

仅供参考,这是一个替代实现...可能违反了约1500万条python规则,但我根据信息/观察结果发布了该规则:

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

回答

这是另一个类似于pobk的答案;它使用实例的字典来完成保存/重置变量的工作,但不需要我们在代码中指定它们的名称。我们可以随时调用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

你为什么要这样做?这可能不是最好/唯一的方法。