2010-09-10 4 views
1

У меня есть модуль, который выглядит примерно так:Как вы называете функцию частного модуля внутри класса?

def __myFunc(): 
    ... 

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

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

NameError: global name '_MyClass__myFunc' is not defined 

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

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

+0

Шаг 1: Не используйте двойные символы подчеркивания '__'. Когда-либо. Нет никакого смысла. –

ответ

5

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

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

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

+0

«Но есть несколько случаев, когда это полезно». В практическом плане есть нулевые случаи, когда это полезно. –

Смежные вопросы