在Python中有什麼方法可以創建一個類,然後用相同的dat,a創建該類的第二個版本,但是可以更改它,然後恢復爲與原始類中的數據相同?Python中的類
因此,我將使用1到5的數字作爲數據,然後爲部分(或非常相似)使用相同名稱創建第二個類。在第二課中調用數字,然後使用一個函數,然後將它們重置爲與第一課中的相同。
我發現的唯一選擇是讓一個加重的長課堂,其中有太多獨立的數據片段,以便隨時使用。
在Python中有什麼方法可以創建一個類,然後用相同的dat,a創建該類的第二個版本,但是可以更改它,然後恢復爲與原始類中的數據相同?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()
類沒有值。對象做。基本上你想要一個能夠將實例(對象)重置爲一組默認值的類嗎?
如何提供重置方法,將對象的屬性重置爲默認值?
我認爲你應該簡化你的問題,或告訴我們你真正想做什麼。它一點都不清楚。
投票下來:在Python中,類DO具有屬性(值)。實例也有屬性(值)。從另一種語言轉向python時,理解這一點非常重要。 – gahooa 2009-02-18 18:39:06
我覺得你很困惑。你應該重新檢查「class」和「instance」的含義。
我想你首先聲明一個實例的某個類,然後聲明其他Class的實例,使用第一個實例的數據,然後找到一種方法來轉換第二個實例中的數據,在第一次使用它...
我建議您使用運算符重載來分配數據。
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
爲什麼要這樣做?它可能不是最好的/唯一的方式。
感謝您的回答,teifion給出了我在msn上尋找的答案。我的問題並不清楚。 雖然基本上, 「你基本上想要一個能夠將實例(對象)重置爲一組默認值的類嗎?」 是的。 – leachrode 2008-09-15 16:06:43