"В любой момент выполнения существует как минимум три вложенные области видимости, пространства имен которых доступны напрямую:
- самая внутренняя область, поиск в которой выполняется первой, содержит локальные имена
- области видимости любых включающих функций, поиск которых начинается с ближайшей охватывающей области, содержат нелокальные, но также неглобальные имена
— предпоследняя область содержит глобальные имена текущего модуля.
— самая внешняя область (последний поиск) — это пространство имен, содержащее встроенные имена "
Однако я попробовал использовать следующий код с той же страницы:
Код: Выделить всё
class Dog:
tricks = []
def __init__(self, name):
self.name = name
def add_trick(self, trick):
self.tricks.append(trick) #this is the troublesome self
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over') #without the self this complains
>>> e.add_trick('play dead')
>>> d.tricks
['roll over', 'play dead']
Почему это происходит? Как я понимаю из приведенного выше абзаца, функция add_trick должна искать переменную с именем трюки сначала в своей локальной области видимости, затем, если она не находит ее, в ближайшей охватывающей области видимости, которая является областью действия класса Dog, и там она должна ее найти, без необходимости использования self. Что мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/582 ... on-classes
Мобильная версия