Подтвердить что ты не робот

PEP8 и PyQt, как примирить

Я начинаю использовать PyQt в некоторых проектах, и я сталкиваюсь с стилистической дилеммой. Функции PyQt используют футляр для верблюда, но PEP8, который я предпочитаю следовать, говорит, чтобы использовать символы подчеркивания и все строчные имена функций. Поэтому, с одной стороны, я могу продолжать следовать PEP8, а это значит, что мой код будет иметь смешанные функции, вызывающие функции верблюда и подчеркивания, и даже мои классы будут иметь смешанные имена функций, так как мне нужно будет перегружать такие функции, как mousePressEvent, Или, я могу сломать PEP8 и принять случай верблюда для всех моих имен функций во имя последовательности.

Я понимаю, что это субъективно, и это действительно то, что я лично предпочитаю, но мне нравится слышать от других о том, что они делают и почему они решили сделать это таким образом.

4b9b3361

Ответ 1

В твоих ботинках я бы не боролся с твоей картой, точно так же, как и в общем принципе, я не сражаюсь с мэрией;-). Я, случается, разделяю ваши предпочтения для имен функций нижнего регистра с подчеркиванием, как это указано в PEP 8, но когда я программирую в рамках, которая заставляет использовать другой стиль заглавной буквы, я схожу с ума от принятия этого стиля, так как я не могу убедить рамки для принятия "лучшего" стиля и несоответствия стиля (беспорядочные миксы разных стилей) действительно хуже.

Конечно, некоторая смесь неизбежна, если вы используете более одного фреймворка... например, PyQt с его встроенными функциями и стандартными библиотечными функциями Python со строчными и подчеркиваниями!). Но так как фреймворки, такие как Qt, часто предназначены для расширения подклассификацией, в то время как стандартная библиотека Python имеет меньше аспектов такого дизайна, в большинстве случаев, когда стиль заглавной буквы вынужден (потому что вам нужно переопределить метод, поэтому вы не можете выберите другую заглавную букву), он будет принудительно заменен на camelcase (по Qt), но редко до нижнего регистра (стандартной библиотекой Python). Итак, я считаю, что принятие стиля Qt в этом случае по-прежнему является меньшим злом.

Ответ 2

В документе pep8 говорится, что делать в этом случае (основное внимание):

Новые модули и пакеты (включая сторонние структуры) должны быть записаны в эти стандарты, но там, где существующая библиотека имеет другой стиль, предпочтительна внутренняя согласованность.

Ответ 3

Используйте то, что лучше всего подходит.

Если вы подклассифицируете классы Qt или имеете функцию, сильно интегрированную с ними UseCamelCase.

В противном случае use_underscores.

Ответ 4

Вы можете использовать символы подчеркивания, если вы подклассифицируете это. И вы можете назвать свои методы с помощью подчеркивания, а PyQt4 сможет использовать их, как если бы вы назвали их с помощью camelCase.

class SomeClass(object):
    def __getattr__(self, attr):
        if '_' in attr:
            new = [c for c in attr]
            while True:
                try:
                    new_char = new[new.index('_') + 1].upper()
                    new[new.index('_'):new.index('_') + 2] = new_char
                except (IndexError, ValueError):
                    break
        else:
            for c in attr:
                if c.isupper():
                    new = []
                    for i, c in enumerate(attr):
                        if i != 0 and c.isupper():
                            new.append('_')
                        new.append(c.lower())
                    break
        try:
            return super(type(self), self).__getattribute__(''.join(new))
        except Exception:
            return super(type(self), self).__getattribute__(attr)

Ответ 5

Возможно, разумное использование модулей для разделения стилей в разных модулях может помочь. По крайней мере, попробуйте модулизовать базовый код стиля PEP8 для собственного модуля вспомогательных функций.