2011-06-02 7 views
0

集計にネストされたクラスから親クラスのメンバーにアクセスすることが可能ですクラスB内のfoo/bar変数?はいの場合は、どうですか?は、それは私が凝集の一種として、クラス内でクラスを宣言すると言う、私の質問がある

wxpythonを使用しているときにこの問題が発生し、特定のカスタムダイアログを処理するためにメインフレームクラス内にクラスを書き込む必要があります。事前に

感謝:)

+0

を更新する必要はありませんか? –

+0

Aクラスのスコープにインスタンス(自己)参照があることは意味をなさない。 – Keith

+0

私のプログラムでは、このように、クラスAは実際には高レベルのFrameクラスであり、Aのメソッドはフレームのイベントハンドラ(def evthandler(self、event):)の形式です。イベントハンドラが呼び出されるたびにカスタムダイアログ(Bと定義されています)を生成する必要があります。 – kny8mare

答えて

1
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を破る必要がありますそれは...

0

私は次の修正を提案します:

あなたはクラス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

関連する問題