class Outer(object):
outer_var = 1
class Inner(object):
@property
def inner_var(self):
return Outer.outer_var
これは、他の言語で機能する同様のものとまったく同じではなく、 へのアクセスをスコープする代わりにグローバル ルックアップを使用しますouter_var
。(名前がバインドされているオブジェクトを変更するOuter
と、このコードは次に実行されるときにそのオブジェクトを使用します。)
代わりに、実際にはインスタンス属性であるため、すべてのInner
オブジェクトに への参照を持たせたい場合:Outer
outer_var
class Outer(object):
def __init__(self):
self.outer_var = 1
def get_inner(self):
return self.Inner(self)
# "self.Inner" is because Inner is a class attribute of this class
# "Outer.Inner" would also work, or move Inner to global scope
# and then just use "Inner"
class Inner(object):
def __init__(self, outer):
self.outer = outer
@property
def inner_var(self):
return self.outer.outer_var
クラスのネストは Python ではあまり一般的ではなく、クラス間の特別な関係を自動的に意味するものではないことに注意してください。入れ子にしないほうがいいです。Outer
(必要に応じて、クラス属性を に設定することもできInner
ます。)