(搬运自我在SegmentFault的博客)
关于空行###
- 类与顶级函数(top-level function)的定义之间应当空两行。
- 类中的方法之间应当空一行。
- 方法中的逻辑部分之间可以空一行。
关于原文件编码###
Python3中应当总是使用UTF-8。(Python2使用ASCII。)在使用了规定编码后不需要再声明文件编码。
关于命名风格###
- 模块使用小写字母和下划线,包名同样使用小写字母但不要使用下划线。
- 类名使用驼峰命名法。
- 异常的命名以
Error
结尾。 - 函数名和方法名使用小写,用下划线分割单词。
mixedCase
只有在考虑兼容性的时候才使用。 - 类方法的第一个参数总是
cls
,实例方法的第一个参数总是self
。 - 变量命名同函数和方法。如果名字与保留字有冲突,在最后加
_
。 - 私有变量和方法在最前加
_
,此时外部无法访问,但子类可以访问。 - 如果也不希望子类访问,可以以
__
开头。此时无法用ClassName.__var访问 。(但仍然可以通过ClassName._ClassName_a访问到。)
关于公有和私有接口###
- 默认情况下,以
_
开头的变量和方法被认为是私有的。 - 可以使用
__all__
列表指定公开的接口。它会覆盖上一条规则。
关于Python中的下划线###
Python中的下划线用法有这么几种:
a_
:避免名字与保留字等的冲突。_a
:表示私有。只能在类内部和子类中访问。__a
:只能在类内部使用。__a__
:Python内魔法
对象的命名。其他情况不要这样命名。
关于getter(accessor)和setter(mutator)###
Python中不推荐使用类似于Java中的getX
和setX
。相反,应当直接对变量进行操作。
如果要操作的对象不能或不适合直接操作,可以使用内建的property
方法自定义功能。property
有两种用法:
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
或者:
class C:
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
这样,当执行C.x
,C.x = value
和del C.x
时就会分别调用这三个方法。