вторник, 8 апреля 2014 г.

приватные атрибуты в python

Ну нет приватных членов в питоне, ну нет...
Не надо писать С++/Java подобный код:

class C(object):
    def __init__(self):
        self.__name = 'default'

    def set_name(self, name):

        self.__name = name

    def get_name(self):

        return self.__name

Пробуем
>>>С().__name

Traceback (most recent call last):
  ...
    C().__name

AttributeError: C instance has no attribute '__name'

Посмотрим на список атрибутов объекта

>>>С().__dict__
{'_C__name': 'default'}

Ну и в догонку меняем атрибут

>>>С()._C__name = 'new_name'

Двойное подчеркивание всего лишь соглашение, интерпретатор ничего не прячет,

он лишь переименовывает атрибут. То же самое касается и приватных методов, единственно получать новое название метода нужно через dir().

Да и, если хотите управлять доступом к атрибутам, смотрите в сторону свойств.



Ссылки

https://docs.python.org/2/library/stdtypes.html#object.__dict__
http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private

Комментариев нет:

Отправить комментарий