Ну нет приватных членов в питоне, ну нет...
Не надо писать С++/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().
Да и, если хотите управлять доступом к атрибутам, смотрите в сторону свойств.
http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private
Не надо писать С++/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
Комментариев нет:
Отправить комментарий