2017-02-14 7 views
0

Je suis un peu débutant quand il s'agit de cours.Python; Travailler avec une variable d'instance créée par une méthode

J'ai une classe définie comme suit (simplifié aux fins du présent article)

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) 

Je veux être en mesure d'obtenir le « sheetID » pour chaque instance en disant quelque chose comme ce qui suit (encore une fois, cette pourrait être complètement incorrect):

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

Bien sûr, ne fonctionne pas, mais je ne suis pas sûr de ce que je dois faire pour le faire fonctionner.

Je veux m'assurer que l'ID reste constant et ne se recréera pas avec de nouveaux nombres aléatoires.

Nous vous remercions à l'avance

Répondre

2

Il suffit de générer et affecter le id à __init__. En général, en tant qu'utilisateur de la classe, vous ne voulez pas vous soucier de générer le id vous-même. En ce qui vous concerne, l'instanciation Worksheet vous donne un objet complet et utilisable.

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) 

volonté sortie

somefilenamewithspaces 
somefilenamewithspaces68237 
0

La vie sheetId variables dans la méthode idMaker de cette classe, vous ne pouvez pas y accéder avec un opérateur de points. Si vous essayez de créer des ID personnalisés pour les instances de votre classe, je recommande de le faire dans la méthode du constructeur de classe afin qu'il soit affecté à la création d'objet. Peut-être étudier ce qui suit:

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

Pas tout à fait raison. Un nouveau nombre aléatoire est généré avec chaque appel, et cela ne fait pas pour un ID –

+0

@MosesKoledoye Oui, je vais frapper cela de ma réponse initiale. Je n'ai pas compris cela lors de ma première visite à la question. – Aaron