2017-07-28 6 views
0

コンストラクタ内の変数代入に関する質問があります。引数 'context'をとるコンストラクタがあります。まず、この変数をクラス変数に割り当てます。次に、別のクラスを作成します。このクラスでは、「コンテキスト」を引数として取ります。コンストラクタでの変数代入

私の質問:クラス変数(self.context)またはコンストラクタ(コンテキスト)から新しい作成クラスへの引数を割り当てる方が良いですか?

class State(): 
    def __init__(self, context): 
     self.context = context   
     self.diconnected = Disconnected(self.context) 

又は

+2

これらはインスタンス変数であり、クラス変数ではありません。 –

+0

混乱のために申し訳ありません。私はもちろん、インスタンス変数を意味します – Caduceus

答えて

2
class State(): 
     def __init__(self, context): 
      self.context = context   
      self.diconnected = Disconnected(context) 

最終結果は同じです。 Disconnected(context)はわずかに短くて高速です。

0

これは実際にはPythonの重要な方法でプログラムの実行時間に影響を与えません。これが重要な唯一の状況は、複数のスレッドがこのデータを使用している可能性がある場合です。私はいつものために議論を使うだろう。

+0

明示するには:スレッドは代入(self.context = context)とself.contextを引数として使用して無効な状態になることがありますか? – Caduceus

+0

2番目のクラスのコンストラクタに渡される前にself.contextの値を変更する可能性があります。 – pointerless

0

誰も客観的に "より良い"ものではありません。いずれにしても同じオブジェクトをDisconnectedに渡しています。 Disconnectedは(もselfは常に1を持っていることを意味する)selfと同じコンテキストを持っていること、またはそれがパラメータとして渡されたコンテキストを持っていること:あなたが強調したい依存関係これであなたが書く1

は依存しています。