Пространства имен, атрибуты

Материал из Институт биоинформатики
Перейти к: навигация, поиск

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

Понятие Namespace тесно связано с областью видимости. Область видимости является текстовым участком кода, позволяющим создавать и искать атрибуты, входящие в определенные пространства имен. При запуске интерпретатора подгружается основной модуль __main__ , для которого создается свой global Namespace (по аналогии с global scope). Namespace могут иметь разное время существования: стираться и создаваться с чистого листа. Самый постоянный Namespace - builtins , содержит названия встроенных типов и функций языка python [2] .

Области видимости и пространства имен[3]

Если мы подгружаем в скрипт модуль, пишем класс или функцию, то для них создается 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


Ссылки

  1. Классы и пространства имен в Python, https://docs.python.org/3/tutorial/classes.html#a-word-about-names-and-objects
  2. Модуль builtins, https://docs.python.org/3/library/builtins.html#module-builtins
  3. Области видимости и пространства имен, http://pythlife.blogspot.ru/2012/10/blog-post_29.html