AlenПросмотр кодировки, которая устанавливается при создании экземпляра.
Какую смысловую нагрузку имеет метод encoding c декоратором @property если свойство класса encoding в классе не изменяется?
>>> f = open('/etc/passwd') >>> f.encoding 'UTF-8' >>> f.encoding = 'x' Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: readonly attribute >>>
AlenЭто не приватные методы, а вспомогательные (служебные). Просто, чтобы они в документацию (help) не попадали, у них ставится подчёркивание.
Зачем тут нужна имитация приватных данных и методов с ‘_’ ?
AlenУ байтовых объектов нет метода .format()
Вместо ‘+’ и “типа констант” используете метод format.
>>> b''.format Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'bytes' object has no attribute 'format' >>>
tz4678@gmail.comВот так делать, конечно, не надо - мало ли, что там ещё может быть. Меняй либо через .translate()s.replace('\n', '%0A').replace('\r', '%0D').replace('"', '%22')))
>>> '\r\n"'.translate(str.maketrans({'\r': '%0D', '\n': '%0A', '"': '%22'})) '%0D%0A%22' >>>
>>> import re >>> >>> s = 'abc\r\r\n\ndef"' >>> >>> re.sub(r'[\r\n"]', lambda mo: '%{:02X}'.format(ord(mo.group())), s) 'abc%0D%0D%0A%0Adef%22' >>>
py.user.next
Просмотр кодировки, которая устанавливается при создании экземпляра.
class A: def __init__(self, encoding='utf-8'): self.encoding = encoding class B: def __init__(self, encoding='utf-8'): self._encoding = encoding @property def encoding(self): return self._encoding a = A() a.encoding 'utf-8' b = B() b.encoding 'utf-8' c = A('koi8-r') c.encoding 'koi8-r'
py.user.next
Это не приватные методы, а вспомогательные (служебные). Просто, чтобы они в документацию (help) не попадали, у них ставится подчёркивание.
py.user.next
байтовых объектов нет метода .format()
AlenНо таким образом его и задать можно. ТС сделал свойство только для чтения, чтобы предотвратить изменение кодировки после инициализации класса.
её и так можно посмотреть без метода
FishHook
Но таким образом его и задать можно. ТС сделал свойство только для чтения, чтобы предотвратить изменение кодировки после инициализации класса.
AlenТак нельзя смотреть. Происходит привязка программы к внутреннему содержимому объекта. Это что-то вроде глобальных переменных - то есть на первый взгляд выглядит удобным, но делать так нельзя.
её и так можно посмотреть без метода:
AlenЕсли это свойство, то оно и должно попасть, так как свойство предназначено для использования объекта снаружи .
Пример без подчеркивания выше, таки ‘encoding’ и так и так в документацию попадет
AlenСвойства - часть интерфейса объекта. Каким бы ни было его содержимое, свойства гарантируют определённое поведение.
всё дело в размере кода и его читаемости
AlenВидимо, чтобы не перекодировать их лишний раз из юникода в ascii.
А зачем они байтовые?