在Python中是否有任何方法可以创建一个类,然后使用相同的dat创建该类的第二个版本,但是可以更改,然后还原为与原始类中的数据相同?
所以我会创建一个数字1到5的类作为其中的数据,然后为部分(或非常相似)创建一个具有相同名称的第二个类。使用一个函数将第二类中的数字混乱,然后将它们重置为与第一类中相同。
我发现的唯一选择是制作一个加剧的长篇,其中包含太多单独的数据,以便随时使用。
答案 0 :(得分: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()
答案 1 :(得分:2)
这是另一种类似pobk的答案;它使用实例的dict来完成保存/重置变量的工作,但不要求您在代码中指定它们的名称。您可以随时调用save()来保存实例的状态,并重置()以重置为该状态。
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
你为什么要这样做?它可能不是最佳/唯一的方式。
答案 2 :(得分:1)
类没有值。对象呢。您想要的基本上是一个可以将实例(对象)重置为一组默认值的类吗?
如何提供一个重置方法,将对象的属性重置为默认值?
我认为你应该简化你的问题,或告诉我们你真正想做的事情。这一点都不清楚。
答案 3 :(得分:1)
我觉得你很困惑。你应该重新检查“class”和“instance”的含义。
我认为你试图首先声明某个类的实例,然后声明其他类的实例,使用第一个实例中的数据,然后找到一种方法来转换第二个实例中的数据并使用它在第一次......
我建议您使用运算符重载来分配数据。
答案 4 :(得分:1)
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__()
答案 5 :(得分:1)
仅供参考,这是另一种实施方式......可能违反了大约1500万条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