Python: передача экземпляра вложенной функции

#python #python-3.x #function #class

#python #python-3.x #функция #класс

Вопрос:

 class A:
    def __init__(self, x, y):
        self.base = x
        self.core = y

    def addBaseCore(self, initial):
        def addBase(z):   # vs. def addBase(self, z)
            return z   self.base
        initial  = self.core
        # vs. Do we pass self to the nested function? e.&. addBase(self, z)
        return addBase(initial) 
  

Я новичок в Python, и мне любопытно, как / почему возможно получить доступ к атрибутам экземпляра внутри вложенной функции без явной передачи экземпляра вложенной функции (как показано выше)?

Внутренний метод не является в точности методом экземпляра и не получает экземпляр в качестве аргумента. Каким образом внутренний метод по-прежнему может получать доступ к атрибутам экземпляра?

Спасибо за всю помощь.

Ответ №1:

Нет необходимости передавать self во вложенную функцию, которая определена внутри вашей функции-члена.

Вот пример использования вашего кода.

 a = A(10, 20)
print(a.addBaseCore(30))
  

Вывод

 60
  

Комментарии:

1. Спасибо за ваш ответ. Я знаю, что фрагмент кода работает так, как изначально предполагалось. Но мне любопытно, почему это работает? Как внутренняя функция получает доступ к экземпляру, если она не является а) методом экземпляра б) не получает экземпляр в аргументах.

2. Внутренняя функция разделяет контекст с внешней функцией. В этом случае внешняя функция является функцией-членом.