Я передаю функцию как параметр конструктору класса. Конструктор сохраняет его в переменной экземпляра, и другие методы класса хотят его вызвать.Как вызвать функцию, сохраненную в переменной экземпляра класса Python
class ComboList(list) :
def __init__(self,a,b,kg) :
list.__init__(self)
self.__kg = kg
# More stuff follows
Когда я пытаюсь вызвать функцию в другом методе, например:
x = self.__kg('a')
я получаю "{AttributeError} 'объект не имеет атрибута '__kg'."
Когда я оцениваю вызов функции в окне «Вычисление выражения IDE», я получаю то же самое. Но когда я оцениваю сам переменный экземпляр («сами .__ кг»), я получаю:
result = {function} <function <lambda> at 0x0000000002ED5C18>
... так что кажется, что атрибут __kg является определена.
Что происходит не так?
Я могу вызвать функцию, указав параметр - не проблема.
kg(a')
Я также могу присвоить значение параметра переменной метода и вызвать переменную - без проблем.
_kag = kg
_kag('a')
Это только ссылка на переменную экземпляра, которая не работает.
Это [** название mangling **] (https://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_Python) - попробуйте '_ComboList__kg'. Или просто выровняйте двойные подчеркивания. – jonrsharpe
Можете ли вы, пожалуйста, обновить код, в котором вы создаете объект 'ComboList', и вызывать функцию kg? –
jonrsharpe, это имеет смысл, но это удивительно. Я знаю, что изменение имени должно заставить переменных трудно случайно получить за пределами объекта области, где они определены. Я не ожидал, что это сильно изменится в пределах объекта области. @Anand, неясно, какое обновление вы имеете в виду. Код не изменился каким-либо соответствующим образом. Если это все еще нужно, проясните, и я постараюсь разместить вас. –