2016-06-19 4 views
0

私はSchoolという新しいクラスを作成し、既存のインスタンス(createSchoolが呼び出された)を置き換えるcreateSchoolというメソッドを持っているSchoolというクラスがあるとしましょう...メソッド内からクラスを再作成/再割り当てする最も適切な方法は何ですか?

擬似コードは以下の下:

class School(object): 
    def __init__(self,a=None,b=None): 
     self.a = a 
     self.b = b 

    def createSchool(self,schoolFile): 
     #...code to parse schoolFile and extract a,b and create a dict 
     # called schoolDict 
     newClass = School(**schoolDict) 
     #This step replaces the old dict with the new one, thereby reassigning all 
     # attributes. 
     self.__dict__ = newClass.__dict__ 

私の質問は、私は、新しく作成した1のそれと既存のインスタンスの辞書を交換すると、最後にやった事、それについて移動するための最良の方法ですか?

おかげで、
Sarith

答えて

1

はるかに優れたアプローチは、にあるではないは呼び出しインスタンスを消し去ります。

school = School.createSchool(...) 
+0

ありがとうございます。だから、インスタンスを作成せずに、ファイルを解析してインスタンスを作成することをお勧めしますか? –

+0

絶対に...あなたの 'createSchool'を学校用の別のコンストラクタの一種と考えてください – donkopotamus

1

私はあなたが@classmethodデコレータを使用することができると思う

class School(object): 
    def __init__(self,a=None,b=None): 
     self.a = a 
     self.b = b 

    @classmethod 
    def createSchool(cls,schoolFile): 
     schoolDict = parse(schoolFile) 
     newClass = School(**schoolDict) 
     return newClass 
+0

ありがとう:その代わり、これが今のように使用できるクラスメソッドとして

class School(object): def __init__(self,a=None,b=None): self.a = a self.b = b @classmethod def createSchool(cls, schoolFile): # code to parse schoolFile and extract a,b and create a dict called schoolDict ... return cls(**schoolDict) 

を表現しなければなりません!私はあなたの答えの両方を受け入れることができればいいと思います(私は2人から同じ答えを得ました!)。 –

+0

ほとんど同じ... 'classmethod'は一般的に、明示的なクラス(' School')ではなく 'cls'を使って物を構築したいと考えています。これは' School'からうまく継承することができます。 – donkopotamus

+0

問題はありませんが、他の答えはより詳細です。 –

関連する問題