2017-02-14 19 views
0

クラスについては初心者の方が少しです。Python;メソッドによって作成されたインスタンス変数を使って作業する

私はこれ、私は再び(以下のようなものを言うことによって、各インスタンスのための「sheetID」を取得できるようにする(この記事のために簡略化)以下のように定義されたクラス

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) 

を持っています当然の

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

これは動作しませんが、私はそれを動作させるために何をする必要があるかわからない。)完全に間違っている可能性があります。

IDが一定のままで、新しい乱数で自分自身を再作成しないようにしたいと思います。

は、そのクラスのidMakerメソッド内sheetId変数生活事前

答えて

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

でいただきありがとうございますので、あなたは、ドット演算子とそれにアクセスすることはできません。あなたのクラスのインスタンスのカスタム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

関連する問題