禁止使用 Yoda 语句:永远不要用变量与常量做比较,而是把常量与变量做比较: God Bad 比较:- 跟任意类型:
== 和 != - 跟单例,使用
is 和 is not (例如 foo is not None ) - 永远不要与 True 或 False 做比较(比如永远不要写
foo == False ,而使用 not foo ) 否定包含检查:使用 foo not in bar 而不是 not foo in bar 实例检查:用 isinstance(a, C) 而不是 type(A) is C , 但通常试图避免 实例检查,请对特性检查。命名约定- 类名:
CamelCase ,缩写词大写( HTTPWriter 而非 HttpWriter ) - 变量名:
lowercase_with_underscores - 方法和函数名:
lowercase_with_underscores - 常量:
UPPERCASE_WITH_UNDERSCORES - 预编译正则表达式:
name_re
被保护的成员以单个下划线作为前缀,双下划线为 mixin 类保留。 有关键字的类上,在末尾添加下划线。允许与内置组建冲突,并且 一定不要 在用在变量名后添加下划线的方式解决。如果函数需要访问一个隐蔽 的内置构件,重绑定内置构件到一个不同的名字作为替代。 - 函数和方法参数:
- 类方法:
cls 作为第一个参数 - 实例方法:
self 作为第一个参数 - 属性的 lambda 表达式应该把第一个参数替换为
x ,像 display_name = property(lambda x: x.real_name or x.username) 中一样
文档注释- 文档字符串约定:
所有的文档注释应为 Sphinx 可理解的 reStructuredText 格式,其格式根据注释行数而变化。 如果只有一行,闭合的三引号和开头的三引号在同一行, 否则开头的三引号与文本在同一行,而闭合的三引号另起一行: def foo():
"""This is a simple docstring"""
def bar():
"""This is a longer docstring with so much information in there
that it spans three lines. In this case the closing triple quote
is on its own line.
"""
- 模块标头:
模块标头包含一个 utf-8 编码声明(即使没有使用非 ASCII 字符,也始终推荐这么做) 和一个标准的文档注释: # -*- coding: utf-8 -*-
"""
package.module
~~~~~~~~~~~~~~
A brief description goes here.
:copyright: (c) YEAR by AUTHOR.
:license: LICENSE_NAME, see LICENSE_FILE for more details.
"""
请留意,合适的版权和许可证文件对于 Flask 扩展通过审核是必须的。
注释注释的规则和文档注释类似。两者都使用 reStructuredText 格式。如果一个 注释被用于一个属性的文档,在起始的井号( # )后加一个冒号: class User(object):
#: the name of the user as unicode string
name = Column(String)
#: the sha1 hash of the password + inline salt
pw_hash = Column(String)
|