2017-02-14 101 views
0

當談到類時,我還是一個初學者。Python;使用由方法創建的實例變量

我有一個類定義如下(簡化了這篇文章的目的)

class worksheet: 
    def __init__(self, filename): 
     self.filename = (filename).strip().replace(" ","") 
    def idMaker(self): 
     number = '{:05d}'.format(random.randrange(1,99999)) 
     sheetId = self.filename+str(number) 

我想要說的東西像下面的(再次,這是能夠得到「sheetID」爲每個實例可能完全不正確):

newSheet = worksheet('testsheet') 
id = newSheet.sheetID 

這當然不起作用,但我不知道我需要做些什麼才能使它工作。

我想確保ID保持不變,並且不用新的隨機數重新創建自己。

預先感謝您

回答

2

剛剛生成和__init__分配id。一般來說,作爲課程的用戶,你不需要關心自己生成id。就你而言,實例化Worksheet爲你提供了一個完整的,可用的對象。

import random 

class Worksheet(object): 
    def __init__(self, filename): 
     self.filename = filename.strip().replace(' ','') 

     number = '{:05d}'.format(random.randrange(1,99999)) 
     self.sheet_id = self.filename + str(number) 

sheet = Worksheet(' some filename with spaces ') 
print(sheet.filename) 
print(sheet.sheet_id) 

將輸出

somefilenamewithspaces 
somefilenamewithspaces68237 
0

該類的idMaker方法中的sheetId變量的生活,所以你不能用點運算符來訪問它。如果您試圖爲您的類的實例創建自定義ID,我建議在類構造函數__init__方法中這樣做,以便在創建對象時分配它。也許考慮以下幾點:

class worksheet: 
    def __init__(self, filename): 
     self.filename = (filename).strip().replace(" ","") 
     number = '{:05d}'.format(random.randrange(1,99999)) 
     self.sheetID = self.filename+str(number) 
+2

不太正確。每次通話都會產生一個新的隨機數字,這並不代表一個ID –

+0

@MosesKoledoye是的,我會從我的初始答案中解決。我在第一次通過這個問題時沒有看到這一點。 – Aaron

相關問題