PEP8 и PyQt, как совместить капитализацию функций? - PullRequest
32 голосов
/ 05 сентября 2010

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

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

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

Ответы [ 5 ]

31 голосов
/ 05 сентября 2010

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

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

11 голосов
/ 05 марта 2011

В документе pep8 сказано, что делать в этом случае (выделено мое):

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

6 голосов
/ 05 сентября 2010

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

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

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

1 голос
/ 05 марта 2011

Вы можете использовать подчеркивание, если подкласс это. И вы можете назвать ваши методы с подчеркиванием, и 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)
0 голосов
/ 06 сентября 2010

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

...