Найти - Пользователи
Полная версия: vanished
Начало » Python для экспертов » vanished
1 2 3 4
tz4678@gmail.com
vanished
Alen
Начните с PEP8 .
Уберите поле __author__ для чего оно?
Каждый импорт в свой отдельной строчке.
Вместо ‘+’ и “типа констант” используете метод format.
Где докстринги ?
Где тесты?
Зачем тут нужна имитация приватных данных и методов с ‘_’ ?
Какую смысловую нагрузку имеет метод encoding c декоратором @property если свойство класса encoding в классе не изменяется? Возможно и с другими методами также, дальше не смотрел.





py.user.next
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
s.replace('\n', '%0A').replace('\r', '%0D').replace('"', '%22')))
Вот так делать, конечно, не надо - мало ли, что там ещё может быть. Меняй либо через .translate()
>>> '\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'
>>>
tz4678@gmail.com
vanished
tz4678@gmail.com
vanished
tz4678@gmail.com
vanished
Alen
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) не попадали, у них ставится подчёркивание.

Пример без подчеркивания выше, таки ‘encoding’ и так и так в документацию попадет, всё дело в размере кода и его читаемости. Есть места где это нужно по каким-то соображениям, но не здесь.

py.user.next
байтовых объектов нет метода .format()

А зачем они байтовые?
FishHook
Alen
её и так можно посмотреть без метода
Но таким образом его и задать можно. ТС сделал свойство только для чтения, чтобы предотвратить изменение кодировки после инициализации класса.
Alen
FishHook
Но таким образом его и задать можно. ТС сделал свойство только для чтения, чтобы предотвратить изменение кодировки после инициализации класса.

Спасибо, об этом я как-то не подумал, правда ума не приложу зачем оно такое.
py.user.next
Alen
её и так можно посмотреть без метода:
Так нельзя смотреть. Происходит привязка программы к внутреннему содержимому объекта. Это что-то вроде глобальных переменных - то есть на первый взгляд выглядит удобным, но делать так нельзя.

Alen
Пример без подчеркивания выше, таки ‘encoding’ и так и так в документацию попадет
Если это свойство, то оно и должно попасть, так как свойство предназначено для использования объекта снаружи .

Alen
всё дело в размере кода и его читаемости
Свойства - часть интерфейса объекта. Каким бы ни было его содержимое, свойства гарантируют определённое поведение.

Alen
А зачем они байтовые?
Видимо, чтобы не перекодировать их лишний раз из юникода в ascii.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB