Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2011 03:24:36

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

пытаюсь сделать вот так:

__GlobalVar = True

class __Xxx( baseClass ):

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

ПС. если GlobalVar без подчеркиваний - работает.



Офлайн

#2 Март 1, 2011 07:52:32

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

Зачем вам вообще global понадобился? Все и без него заработает, почитайте о областях видимости переменных.



Офлайн

#3 Март 1, 2011 10:19:52

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

igor.kaist
из названия темы должно быть очевидно, что я читал про область видимости, но мне “не все ясно”.

в частности, не понятно почему не работают два подчеркивания. почему? можете ответить по существу?



Офлайн

#4 Март 1, 2011 10:43:32

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

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

http://docs.python.org/tutorial/classes.html#tut-private



Офлайн

#5 Март 1, 2011 12:45:40

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

Soteric
спасибо!

я когда читал это первый раз, думал что речь идет только о self.__что-то_там
кстати, имхо создатели Питона могли бы и различать глобальные переменные закрытые в модуле от глобальных переменных, закрытых в классах. ничего сложного в этом нет и никаких концепций Питона это не нарушает.



Офлайн

#6 Март 1, 2011 14:45:06

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Глобальные переменные - не все ясно

Я бы не говорил столь категорично про сложность.
Лучше бы этих __a не было совсем.



Офлайн

#7 Март 1, 2011 16:26:06

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

Да и использование глобальных переменных тоже сомнительная практика.

Офлайн

#8 Март 1, 2011 22:43:32

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

Ferroman
Да и использование глобальных переменных тоже сомнительная практика.
как говорится, всему свое место =)



Офлайн

#9 Март 1, 2011 23:19:34

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

я вообще не понимаю зачем нужны __ololo и ни разу не видел кода с ними, кроме тестового задания на знание фишек этого самого __ololo



Офлайн

#10 Март 2, 2011 01:16:34

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные - не все ясно

Zubchick
я вообще не понимаю зачем нужны __ololo и ни разу не видел кода с ними, кроме тестового задания на знание фишек этого самого __ololo
ну что я могу сказать, за свою программерскую жизнь я многое видел. думаю и вы когда-нибудь увидите использование __ololo =) пока же вы можете просто предположить, что эту возможность не просто так ввели создатели Питона, а значит эта фишка нужна by default.

что касается понимания, то Soteric дал годную ссылку, которая должна помочь вам понять зачем нужны __ololo =)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version