2016-12-06 5 views
-1

グローバルに初期化する巧妙な方法はありますか?だから私はのようなオブジェクトを作成するとき:オブジェクトをグローバルとして初期化する

class A(object): 
    def __init__(self): 
     global self 
     super(A, self).__init__() 

これは明らかに動作しませんが、フラスコ内のgのようにこれを処理するための良い方法がある場合、私は興味があります。

+2

オブジェクトはグローバル、ローカルなどではありません。それらはすべてヒープ上に存在します。 *名前はスコープを持っています。 – chepner

+0

しかし、initを実行するとグローバルになります。 – Rob

+0

いいえ、* object *はグローバルではないためです。オブジェクトを割り当てる*名前にスコープがありますが、その情報は '__init__'メソッドでは利用できません。 – chepner

答えて

1

selfはコンストラクタのパラメータなので、これは可能ですが、selfでは機能しません。

class A(object): 
    def __init__(self): 
     global instance 

     instance = self 
     super(A, self).__init__() 


A() 
instance 
<__main__.A at ...> 

これは本当に本当にエッジのケースでのみ使用されるかもしれませんが、私はそれが理にかなっているケースはありません。

インスタンスが作成されている場合にのみ動作します。インスタンスではなく生のクラスを使用する場合は、クラス名をグローバルとしてマークできます。

global A 
class A(object): 
    pass 
+0

これは、 'A'のインスタンスを参照する*グローバル名を作成します。 '__init__'を呼び出すたびに、' instance'が変更を参照するインスタンスが変更されます。 – chepner

+0

@chepnerもちろん、こういうわけで私は "私はそれが理にかなっている場合は何も見ません"と言いました。 – user312016

+0

もちろん、 'instance = A()'でも同じことができます... –

関連する問題