2008-09-15 76 views
1

在Python中有什麼方法可以創建一個類,然後用相同的dat,a創建該類的第二個版本,但是可以更改它,然後恢復爲與原始類中的數據相同?Python中的類

因此,我將使用1到5的數字作爲數據,然後爲部分(或非常相似)使用相同名稱創建第二個類。在第二課中調用數字,然後使用一個函數,然後將它們重置爲與第一課中的相同。

我發現的唯一選擇是讓一個加重的長課堂,其中有太多獨立的數據片段,以便隨時使用。

+0

感謝您的回答,teifion給出了我在msn上尋找的答案。我的問題並不清楚。 雖然基本上, 「你基本上想要一個能夠將實例(對象)重置爲一組默認值的類嗎?」 是的。 – leachrode 2008-09-15 16:06:43

回答

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

類沒有值。對象做。基本上你想要一個能夠將實例(對象)重置爲一組默認值的類嗎?

如何提供重置方法,將對象的屬性重置爲默認值?

我認爲你應該簡化你的問題,或告訴我們你真正想做什麼。它一點都不清楚。

+3

投票下來:在Python中,類DO具有屬性(值)。實例也有屬性(值)。從另一種語言轉向python時,理解這一點非常重要。 – gahooa 2009-02-18 18:39:06

1

我覺得你很困惑。你應該重新檢查「class」和「instance」的含義。

我想你首先聲明一個實例的某個類,然後聲明其他Class的實例,使用第一個實例的數據,然後找到一種方法來轉換第二個實例中的數據,在第一次使用它...

我建議您使用運算符重載來分配數據。

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

僅供參考,這裏是一個替代實現...可能違反了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 
2

下面是另一個答案有點像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 

爲什麼要這樣做?它可能不是最好的/唯一的方式。