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

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

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

3. “Отсутствие собственной области видимости в методах классов - это одна из особенностей, отличающих Python от C+ или Java. … аргумент self в Python - это то же самое, что указатель this”.
С this не работал, поэтому не понимаю о чем речь. Можете объяснить, что за механика за этим скрывается?
ZAN
2. Имелось ввиду другое:
class MyClass:
def meth1(self):
pass
print(meth1) #<- это работает, область видимости класса

def meth2(self):
meth1() #<- это не работает, т.к. другая область видимости
self.meth2() # <- а это уже работает, т.к. мы указали self
3. Пункт не верен - у методов своя область видимости (локальная), но доступ к атрибутам осуществляется иначе, чем у ява/C++
Master Niga
ZAN
def meth2(self): 
meth1() #<- это не работает, т.к. другая область видимости
self.meth1() # <- а это уже работает, т.к. мы указали self
В с++ можно было в методе использовать другой метод того же класса, просто написав его вызов (либо после ИмяКласса::), в пайтоне - через “self. ”; с атрибутами так же. Понятно, спасибо.
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