Можно ли получить доступ к членам родительского класса из вложенного класса в агрегации - PullRequest
0 голосов
/ 02 июня 2011

Мой вопрос, скажем, я объявляю класс в классе, как своего рода агрегацию:

class A:

    self.foo = 20
    self.bar = 30

    def someFunc(self):

        class B:
            # some code here

        BObject = B()

возможно ли получить доступ к переменным foo / bar из класса B? Если да, то как?

Я столкнулся с этой проблемой при использовании wxpython и необходимости написать класс в классе основного фрейма для обработки определенного пользовательского диалога.

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 02 июня 2011
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 голосов
/ 02 июня 2011

Предлагаю следующую поправку:

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

...