2011-06-02 83 views
0

我的問題是,說我聲明一個類中的一類,作爲一種聚合的:是否有可能從一個嵌套類訪問父類的成員聚集

class A: 

    self.foo = 20 
    self.bar = 30 

    def someFunc(self): 

     class B: 
      # some code here 

     BObject = B() 

是否有可能訪問B類內的foo/bar變量?如果是,那麼如何?

我在使用wxpython時遇到了這個問題,並且需要在主框架類中編寫一個類來處理特定的自定義對話框。

感謝提前:)

+0

你爲什麼在A的方法大廈B? – 2011-06-02 08:27:00

+0

讓A類作用域中的實例(self)引用沒有任何意義。 – Keith 2011-06-02 08:27:44

+0

那麼它是這樣的,在我的程序中,類A實際上是一個高級別的Frame類,而A的方法是一個事件處理程序(以def evthandler(self,event)的形式:)。每當事件處理程序被調用時,我需要產生一個自定義對話框(定義爲B)。 – kny8mare 2011-06-02 08:29:28

回答

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) 

但是,如果可以的話,你真的應該打破B類出來A類的,使用它的__init__方法來初始化它...

0

我建議以下更正:

>>> 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類