Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2011 16:34:54

Master Niga
От:
Зарегистрирован: 2007-01-22
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Пространство имен, область видимости и self?

Только приступил к изучению. Из Бизли:
“Классы определяют собственные пространства имен, но они не образуют области видимости для имен, используемых внутри методов… Например, ссылки на атрибуты в методах всегда должны производиться относительно имени self.”

1. Про пространство имен понял так: чтобы получить доступ к свойству инстанса, нужно написать Инстанс.свойство. Либо к одноименному классу из другого пакета: ИмяПакета.ИмяКласса.СтатикСвойство.

2. Про область видимости не понял. Если в нескольких методах одного класса есть переменная с одним и тем же именем, то она что - будет “перекрываться”? Присвоили значение переменной spam из одного метода - и все переменные spam из других методов получили тоже значение?

3. “Отсутствие собственной области видимости в методах классов - это одна из особенностей, отличающих Python от C+ или Java. … аргумент self в Python - это то же самое, что указатель this”.
С this не работал, поэтому не понимаю о чем речь. Можете объяснить, что за механика за этим скрывается?



Отредактировано (Сен. 16, 2011 16:36:26)

Офлайн

#2 Сен. 16, 2011 16:55:46

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Пространство имен, область видимости и self?

2. Имелось ввиду другое:

class MyClass:
def meth1(self):
pass
print(meth1) #<- это работает, область видимости класса

def meth2(self):
meth1() #<- это не работает, т.к. другая область видимости
self.meth2() # <- а это уже работает, т.к. мы указали self
3. Пункт не верен - у методов своя область видимости (локальная), но доступ к атрибутам осуществляется иначе, чем у ява/C++



Офлайн

#3 Сен. 16, 2011 18:21:31

Master Niga
От:
Зарегистрирован: 2007-01-22
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Пространство имен, область видимости и self?

ZAN
def meth2(self): 
meth1() #<- это не работает, т.к. другая область видимости
self.meth1() # <- а это уже работает, т.к. мы указали self
В с++ можно было в методе использовать другой метод того же класса, просто написав его вызов (либо после ИмяКласса::), в пайтоне - через “self. ”; с атрибутами так же. Понятно, спасибо.



Отредактировано (Сен. 16, 2011 18:22:02)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version