Форум сайта python.su
Только приступил к изучению. Из Бизли:
“Классы определяют собственные пространства имен, но они не образуют области видимости для имен, используемых внутри методов… Например, ссылки на атрибуты в методах всегда должны производиться относительно имени self.”
1. Про пространство имен понял так: чтобы получить доступ к свойству инстанса, нужно написать Инстанс.свойство. Либо к одноименному классу из другого пакета: ИмяПакета.ИмяКласса.СтатикСвойство.
2. Про область видимости не понял. Если в нескольких методах одного класса есть переменная с одним и тем же именем, то она что - будет “перекрываться”? Присвоили значение переменной spam из одного метода - и все переменные spam из других методов получили тоже значение?
3. “Отсутствие собственной области видимости в методах классов - это одна из особенностей, отличающих Python от C+ или Java. … аргумент self в Python - это то же самое, что указатель this”.
С this не работал, поэтому не понимаю о чем речь. Можете объяснить, что за механика за этим скрывается?
Отредактировано (Сен. 16, 2011 16:36:26)
Офлайн
2. Имелось ввиду другое:
class MyClass:
def meth1(self):
pass
print(meth1) #<- это работает, область видимости класса
def meth2(self):
meth1() #<- это не работает, т.к. другая область видимости
self.meth2() # <- а это уже работает, т.к. мы указали self
Офлайн
ZANВ с++ можно было в методе использовать другой метод того же класса, просто написав его вызов (либо после ИмяКласса::), в пайтоне - через “self. ”; с атрибутами так же. Понятно, спасибо.def meth2(self):
meth1() #<- это не работает, т.к. другая область видимости
self.meth1() # <- а это уже работает, т.к. мы указали self
Отредактировано (Сен. 16, 2011 18:22:02)
Офлайн