Найти - Пользователи
Полная версия: Глобальные переменные - не все ясно
Начало » Python для новичков » Глобальные переменные - не все ясно
1 2
indus
пытаюсь сделать вот так:
__GlobalVar = True

class __Xxx( baseClass ):

def foo( self ):
global __GlobalVar
if __GlobalVar:
print 'v rot mne nogi!'
не работает. ругается NameError: “_Xxx__GlobalVar not defined”
почему так в классах? в функциях все нормально работает….

ПС. если GlobalVar без подчеркиваний - работает.
igor.kaist
Зачем вам вообще global понадобился? Все и без него заработает, почитайте о областях видимости переменных.
indus
igor.kaist
из названия темы должно быть очевидно, что я читал про область видимости, но мне “не все ясно”.

в частности, не понятно почему не работают два подчеркивания. почему? можете ответить по существу?
Soteric
Наверное потому, что двойное подчеркивание внутри класса служит для питона сигналом, что данная переменная является закрытой (private) и к ней применяется name mangling.

http://docs.python.org/tutorial/classes.html#tut-private
indus
Soteric
спасибо!

я когда читал это первый раз, думал что речь идет только о self.__что-то_там
кстати, имхо создатели Питона могли бы и различать глобальные переменные закрытые в модуле от глобальных переменных, закрытых в классах. ничего сложного в этом нет и никаких концепций Питона это не нарушает.
Андрей Светлов
Я бы не говорил столь категорично про сложность.
Лучше бы этих __a не было совсем.
Ferroman
Да и использование глобальных переменных тоже сомнительная практика.
indus
Ferroman
Да и использование глобальных переменных тоже сомнительная практика.
как говорится, всему свое место =)
Zubchick
я вообще не понимаю зачем нужны __ololo и ни разу не видел кода с ними, кроме тестового задания на знание фишек этого самого __ololo
indus
Zubchick
я вообще не понимаю зачем нужны __ololo и ни разу не видел кода с ними, кроме тестового задания на знание фишек этого самого __ololo
ну что я могу сказать, за свою программерскую жизнь я многое видел. думаю и вы когда-нибудь увидите использование __ololo =) пока же вы можете просто предположить, что эту возможность не просто так ввели создатели Питона, а значит эта фишка нужна by default.

что касается понимания, то Soteric дал годную ссылку, которая должна помочь вам понять зачем нужны __ololo =)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB