2017-02-14 9 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 

Это, конечно, не работает, но я не уверен, что мне нужно сделать, чтобы заставить его работать.

Я хочу убедиться, что идентификатор остается постоянным и не воссоздает себя с новыми случайными числами.

Спасибо заранее

ответ

2

Просто генерировать и назначить id в __init__. В общем, как пользователь этого класса, вы не хотите заботиться о создании 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

В sheetId переменная живет в пределах idMaker метода этого класса, так что вы не можете получить к нему доступ с помощью оператора точка. Если вы пытаетесь создать пользовательские идентификаторы для экземпляров своего класса, я бы рекомендовал сделать это в методе класса __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 Yea, я удалю это из моего первоначального ответа. В первый раз я не понял этого вопроса. – Aaron