py.user.next
Так нельзя смотреть. Происходит привязка программы к внутреннему содержимому объекта. Это что-то вроде глобальных переменных - то есть на первый взгляд выглядит удобным, но делать так нельзя.
Да почему же нельзя? Если переменная не меняется никоим образом после инициализации, то зачем городить огород? Это имеет смысл только в случае если какой-нибудь метод класса меняет свойство и нам необходимо получать состояние. Здесь ничего не меняется.
По мне так, такая парадигма идет из языков с наличием приватных и защищенных методов и свойств, где можно описать отдельно логику класса и его интерфейсы, только вот для python это не работает.
py.user.next
Если это свойство, то оно и должно попасть, так как свойство предназначено для использования объекта снаружи .
Оно и так и так попадет, причем отличаться не будет совершенно. Причём по отсутствию docstring, видно что человек о документировании совершенно не думал и PEP8/PEP257 вообще побоку.
py.user.next
Свойства - часть интерфейса объекта. Каким бы ни было его содержимое, свойства гарантируют определённое поведение.
Декоратор property делает из метода свойство и это много где нужно, но если человек делает из неизменяемого после инициализации свойства метод, а потом из него опять свойство, ну как это назвать?
Хорошее обоснование дал FishHook, мол защита от дурака, но вот только не от изобретательного дурака, потому как тот сделает всё равно сделает присваивание обратившись к свойству с подчеркиванием, в данном случае к _encoding.
Ну нет у python никакой приватности, просто нет.
py.user.next
Видимо, чтобы не перекодировать их лишний раз из юникода в ascii.
Ну натянуто как-то.