代码之家  ›  专栏  ›  技术社区  ›  Colin

PEP8和PyQt,如何协调函数的大小写?

  •  32
  • Colin  · 技术社区  · 14 年前

    我开始在一些项目中使用PyQt,我遇到了一个风格上的两难问题。PyQt的函数使用camel大小写,但PEP8(我更喜欢使用它)表示函数名使用下划线和全小写。

    因此,一方面,我可以继续遵循PEP8,这意味着我的代码将具有对camel case和下划线函数的混合函数调用,甚至我的类也将具有混合函数名,因为我需要重载mousePressEvent之类的函数。或者,我可以打破PEP8,以一致性的名义对所有函数名采用camel大小写。

    我意识到这是主观的,这正是我个人喜欢的,但我喜欢听别人说他们做什么,为什么他们选择这样做。

    5 回复  |  直到 6 年前
        1
  •  33
  •   Alex Martelli    14 年前

    当然, 一些 带小写和下划线的标准Python库函数!-). 但是,由于像Qt这样的框架通常是打算通过子类化来扩展的,而标准Python库对这种设计的关注较少,在大多数情况下,如果强制使用大写样式(因为需要重写一个方法,所以不能选择不同的大写),那么它将强制使用camelcase(通过Qt),很少使用小写(根据标准Python库)。所以,我认为在这种情况下采用Qt风格仍然是一个较小的缺点。

        2
  •  13
  •   Daenyth    14 年前

    pep8文件说明了在这种情况下应该怎么做(重点是我的):

    最好是内部一致性。

        3
  •  6
  •   DrAl    12 年前

    如果您是Qt类的子类,或者有一个与它们高度集成的函数 UseCamelCase

    否则, use_underscores .

        4
  •  1
  •   Artur Gaspar    14 年前

    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
  •  0
  •   Tony Veijalainen    14 年前

    也许明智地使用模块来区分不同模块中的样式会有所帮助。至少尝试将基本的PEP8风格的代码模块化为自己的helper函数模块。