Как вы вызываете функцию частного модуля из класса?

python

2644 просмотра

1 ответ

У меня есть модуль, который выглядит примерно так:

def __myFunc():
    ...

class MyClass(object):
    def __init__(self):
        self.myVar = __myFunc()

и я получаю ошибку:

NameError: global name '_MyClass__myFunc' is not defined

Как я могу вызвать эту функцию из класса?

edit: Со времени публикации я обнаружил, что могу избежать автоматического искажения, используя одно подчеркивание вместо двойного подчеркивания. Я использовал два в соответствии с «Dive Into Python», в котором говорится, что только двойное подчеркивание обозначает закрытые функции.

Автор: Colin Источник Размещён: 12.11.2019 09:38

Ответы (1)


5 плюса

Решение

Это потому, что компилятор Python заменяет вызовы методов (и доступ к атрибутам) внутри классов, если имя начинается с двух подчеркиваний. Похоже, это также относится к функциям. Например, вызов метода self.__Xбудет заменен self._ClassName__Xна. Это позволяет иметь псевдоприватные атрибуты и методы.

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

Использование двух подчеркиваний необходимо только для атрибутов / методов в классах, если, например, вы не хотите, чтобы они перезаписывались подклассами. Но есть несколько случаев, когда это полезно.

Автор: AndiDog Размещён: 10.09.2010 01:37
Вопросы из категории :
32x32