Предположим, у меня есть класс, и я хочу ссылаться на некоторые элементы в '__dict__
(например, я хочу скопировать dict и удалить атрибут, который не может быть маринованный), изнутри класс.python: ссылки «частные» переменные организованным образом
Проблема заключается в том, эти атрибуты являются «закрытыми», поэтому мой код заканчивает тем, как так
class MyClasss(object):
def __init__(self):
self.__prv=1
def __getstate__(self):
ret=self.__dict__.copy()
del ret['_MyClass__prv']
я ссылаться на имя класса явно в дель заявлении, которое выглядит немного некрасиво для меня. Есть ли что-то приятнее? что-то вроде MyClass.getPrivateString('prv')
Конечно, я могу реализовать его самостоятельно, но я был бы удивлен, если нет встроенного решения, чтобы превзойти эту проблему.
В Python нет никаких частных атрибутов, так как ваши кавычки, похоже, показывают, что вы знаете. Я подозреваю (но не знаю), что двойное подчёркивание должно было предотвращать непреднамеренный доступ к атрибутам '__machinery__', таким как' __getstate__'. – msw
@msw [mangling only происходит, если атрибут начинается с двух символов подчеркивания, и не заканчивается двумя символами подчеркивания.] (Http://docs.python.org/reference/expressions.html#atom-identifiers) Специальные атрибуты, такие как '__getstate__' НЕ искажены. –
[PEP8] (http://www.python.org/dev/peps/pep-0008/) может многое сказать о соглашениях об именах и о том, когда использовать имена с одним и двумя символами в именах. В этой ситуации я бы не использовал двойные подчеркивания. –