2015-06-22 2 views
0
class A(object): 
    class B(object): 
     def __getitem__(self, key): 
      # Obviously not the same self here... 
      x = self.function_A_needs_as_well(key) 

    def function_A_needs_as_well(self, value): 
     pass 

Надеюсь, что пример не так уж плох и, по крайней мере, несколько объясняет. Может ли кто-нибудь сказать мне, как назвать «function_A_needs_as_well» изнутри «класса B»?Функция вызова внутри класса A из класса B внутри класса A?

+2

Почему, по вашему мнению, вам нужны вложенные классы? –

+0

У меня есть [аналогичный вопрос один раз] (http://stackoverflow.com/questions/8878344/defining-a-class-within-another-class-and-calling-a-parent-method) – FallenAngel

+0

По большей части я пытался подклассифицировать строку (тип), которая используется только внутри класса A. Когда вложенный класс невозможен без уродливого кода, я остаюсь с решением, которое у меня уже было. Спасибо, парни! – marcus

ответ

6

Python - это не Java. Вложенные классы не получают специального доступа к содержащим их классам. Из-за этого почти нет причин их гнездовать.

Если экземпляр B нуждается в доступе к экземпляру A, вам необходимо передать его где-нибудь.

0

Существует неявный способ доступа к внешнему классу из внутреннего класса, но вы можете явно передать ссылку внешнего класса при построении внутреннего класса. Посмотрите на следующий код. Я не знаю, ваши проблемы дизайна взглянуть на следующие stackoverflow post

class A(object): 
    class B(object): 
     def __init__(self, a_instance=None): 
      self.a_instance = a_instance 
     def __getitem__(self, key): 
      # Obviously not the same self here... 
      if self.a_instance is not None: 
       x = self.a_instance.function_A_needs_as_well(key) 

    def test_from_inside_A(self): 
     b = A.B(self) 
     b.__getitem__(2) 

    def function_A_needs_as_well(self, value): 
     pass 

##test from outside A 
a = A() 
b = A.B(a) 
b.__getitem__(2) 
1

Я не уверен, что я полностью понимаю ваш вопрос, но вы не могли бы просто получить класс B, чтобы наследовать класс А, а затем вызвать класс А функция, передавая значение при вызове функции?

class A(object): 

    def __init__(self, name="Object A"): 
     self.name = name 

    def classAfunction(self, value): 
     print("This value has been passed to me: ", value) 



class B(A): 

    def __init__(self, name="Object B"): 
     self.name = name 
     super().__init__(name = "Object A") 



ObjectB = B() 

ObjectB.classAfunction("Banana") 

input() 
Смежные вопросы