Скрытые атрибуты классов и модулей
Сокрытие атрибутов (свойств, методов и пр.) и ограничение доступа к ним.
В отличие от некоторых других языков, предоставляющих специальные инструкции для разметки атрибутов, доступ к которым должен быть ограничен (
Тем не менее, действует соглашение, что атрибуты (модулей, классов), начинающиеся с одиночного подчерка (
Помимо этого, существует механизм обфускации (изменения) имён атрибутов, затрудняющий доступ к ним извне (внутри области видимости атрибут доступен по неизменённому имени). Механизм применяется к атрибутам, начинающимся с пары подчерков (
private
, protected
), в Питоне все атрибуты являются публичными (public
).Тем не менее, действует соглашение, что атрибуты (модулей, классов), начинающиеся с одиночного подчерка (
_
) являются скрытыми (их модификация не предусмотрена авторами кода и может привести к неожиданным последствиям). class MyClass:
def __init__(self):
self.some_attr = 1
self._other_attr = 'раз'
self.__hideit = 'скрыт'
my_obj = MyClass()
my_obj.some_attr # 1
my_obj.some_attr = 2
my_obj.some_attr # 2
# Сокрытие договорённостью.
my_obj._other_attr # 'раз'
my_obj._other_attr = 'два'
my_obj._other_attr # 'два'
Помимо этого, существует механизм обфускации (изменения) имён атрибутов, затрудняющий доступ к ним извне (внутри области видимости атрибут доступен по неизменённому имени). Механизм применяется к атрибутам, начинающимся с пары подчерков (
__
). # Сокрытие обфускацией имени.
my_obj.__hideit # AttributeError: 'MyClass' object has no attribute '__hideit'
my_obj._MyClass__hideit # 'скрыт'
my_obj._MyClass__hideit = 'вижу'
my_obj._MyClass__hideit # 'вижу'
Синонимы поиска: Скрытые атрибуты классов и модулей, private, protected, _
В разделе «Договорённости»:
cls
self
Константы (constants)
Специализированные, дподчерк, магические методы
На заметку
У нас есть представительство во ВКонтакте. Ссылка в самом низу страницы.