2017-02-14 23 views
0

Ich bin ein bisschen Anfänger, wenn es um Klassen geht.Python; Arbeiten mit Instanzvariable, die mit einer Methode erstellt wurde

Ich habe eine Klasse definiert als (für die Zwecke dieser Beitrag vereinfacht) folgt

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) 

Ich möchte für jede Instanz die ‚sheetID‘ zu bekommen, um der Lage sein, durch so etwas wie die folgenden (wieder sagen: Das könnte völlig falsch sein):

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

Dies ist natürlich nicht funktioniert, aber ich bin nicht sicher, was ich tun muss, damit es funktioniert.

Ich möchte sicherstellen, dass die ID konstant bleibt und sich nicht mit neuen Zufallszahlen neu erstellt.

Vielen Dank im Voraus

Antwort

2

einfach erzeugen und die id in __init__ zuweisen. Im Allgemeinen möchten Sie sich als Benutzer der Klasse nicht darum kümmern, die id selbst zu generieren. Soweit es Sie betrifft, gibt Instanziieren Worksheet Ihnen ein komplettes, verwendbares Objekt.

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) 

ausgeben wird

somefilenamewithspaces 
somefilenamewithspaces68237 
0

Die sheetId variable Leben innerhalb betreffender idMaker-Methode der Klasse, so dass Sie es nicht mit einem Punkt-Operator zugreifen. Wenn Sie versuchen, benutzerdefinierte IDs für Instanzen Ihrer Klasse zu erstellen, würde ich dies in der Klassenkonstruktormethode __init__ empfehlen, damit sie bei der Objekterstellung zugewiesen wird. Vielleicht sollten Sie Folgendes beachten:

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

Nicht ganz richtig. Eine neue Zufallszahl wird mit jedem Anruf erzeugt, und das macht keine ID –

+0

@MosesKoledoye Ja, ich werde das aus meiner ersten Antwort streichen. Das habe ich beim ersten Mal durch die Frage nicht verstanden. – Aaron

Verwandte Themen