Пространства имен, атрибуты
Пространство имен (Namespace) - это абстрактная область, содержащая определенный набор имен, возникающий при реализации программного кода. Имена (они же атрибуты пространств имен) выступают в роли локальных идентификаторов, на которые ссылаются объекты[1]. Образно существование Namespace можно представить в виде словаря. Например, мы указываем, что x = 29, и где-то в определенном Namespace создается запись: namespace['x'] == obj . Здесь obj ссылается на 29. Систему логически связанных идентификаторов также называют модульной. При этом объекты имеющие одинаковые названия, но содержащиеся в разных модулях, а следовательно и в разных пространствах имен, будут полностью отличаться в исполнении.
Понятие Namespace тесно связано с областью видимости. Область видимости является текстовым участком кода, позволяющим создавать и искать атрибуты, входящие в определенные пространства имен. При запуске интерпретатора подгружается основной модуль __main__ , для которого создается свой global Namespace (по аналогии с global scope). Namespace могут иметь разное время существования: стираться и создаваться с чистого листа. Самый постоянный Namespace - builtins , содержит названия встроенных типов и функций языка python [2] .

Если мы подгружаем в скрипт модуль, пишем класс или функцию, то для них создается local Namespace.
Чтобы обратиться к атрибуту какого либо объекта нужно указать название объекта и через точку имя атрибута. Например, в выражении zoo.snake
, snake
является атрибутом объекта zoo
. Таким образом, атрибут, это ссылка на имя в локальном пространстве имен.
Атрибуты бывают двух типов: read-only и writable. Последнему мы можем присвоить другое значение или удалить.
class MyClass: def__init__(self, a): self.a = a # а - атрибут self x = MyClass(29) x.a # а - атрибут х x.b = 13 del x.b # x.b - атрибут типа writable
Ссылки
- ↑ Классы и пространства имен в Python, https://docs.python.org/3/tutorial/classes.html#a-word-about-names-and-objects
- ↑ Модуль builtins, https://docs.python.org/3/library/builtins.html#module-builtins
- ↑ Области видимости и пространства имен, http://pythlife.blogspot.ru/2012/10/blog-post_29.html