グローバルに初期化する巧妙な方法はありますか?だから私はのようなオブジェクトを作成するとき:オブジェクトをグローバルとして初期化する
class A(object):
def __init__(self):
global self
super(A, self).__init__()
これは明らかに動作しませんが、フラスコ内のg
のようにこれを処理するための良い方法がある場合、私は興味があります。
グローバルに初期化する巧妙な方法はありますか?だから私はのようなオブジェクトを作成するとき:オブジェクトをグローバルとして初期化する
class A(object):
def __init__(self):
global self
super(A, self).__init__()
これは明らかに動作しませんが、フラスコ内のg
のようにこれを処理するための良い方法がある場合、私は興味があります。
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
これは、 'A'のインスタンスを参照する*グローバル名を作成します。 '__init__'を呼び出すたびに、' instance'が変更を参照するインスタンスが変更されます。 – chepner
@chepnerもちろん、こういうわけで私は "私はそれが理にかなっている場合は何も見ません"と言いました。 – user312016
もちろん、 'instance = A()'でも同じことができます... –
オブジェクトはグローバル、ローカルなどではありません。それらはすべてヒープ上に存在します。 *名前はスコープを持っています。 – chepner
しかし、initを実行するとグローバルになります。 – Rob
いいえ、* object *はグローバルではないためです。オブジェクトを割り当てる*名前にスコープがありますが、その情報は '__init__'メソッドでは利用できません。 – chepner