集計にネストされたクラスから親クラスのメンバーにアクセスすることが可能ですクラスB内のfoo/bar変数?はいの場合は、どうですか?は、それは私が凝集の一種として、クラス内でクラスを宣言すると言う、私の質問がある
wxpythonを使用しているときにこの問題が発生し、特定のカスタムダイアログを処理するためにメインフレームクラス内にクラスを書き込む必要があります。事前に
感謝:)
集計にネストされたクラスから親クラスのメンバーにアクセスすることが可能ですクラスB内のfoo/bar変数?はいの場合は、どうですか?は、それは私が凝集の一種として、クラス内でクラスを宣言すると言う、私の質問がある
wxpythonを使用しているときにこの問題が発生し、特定のカスタムダイアログを処理するためにメインフレームクラス内にクラスを書き込む必要があります。事前に
感謝:)
class A(object):
foo = 20
bar = 30
def build_b(self):
class B(object):
foo = self.foo
bar = self.bar
return B()
次にあなたができる:
>>> b_obj = A().build_b()
>>> b_obj.foo, b_obj.bar
<<< (20, 30)
しかし、あなたは、それが初期化する__init__
方法だ使用できるかどうか、あなたが本当にクラスA
のうちのクラスB
を破る必要がありますそれは...
私は次の修正を提案します:
あなたはクラスAを変更した場合>>> class A:
... foo=20
... bar=30
... def build_child(self):
... class B:
... def __init__(self, parent):
... self.parent = parent
... return B(self)
...
>>> a = A()
>>> b = a.build_child()
>>> b
<__main__.B object at 0x89952ac>
>>> b.parent
<__main__.A object at 0x89956ec>
この方法で、あなたはAの方法でBを構築しているのはなぜクラスB
を更新する必要はありませんか? –
Aクラスのスコープにインスタンス(自己)参照があることは意味をなさない。 – Keith
私のプログラムでは、このように、クラスAは実際には高レベルのFrameクラスであり、Aのメソッドはフレームのイベントハンドラ(def evthandler(self、event):)の形式です。イベントハンドラが呼び出されるたびにカスタムダイアログ(Bと定義されています)を生成する必要があります。 – kny8mare