zoukankan      html  css  js  c++  java
  • 从PEP-8学习Python编码风格

    (搬运自我在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中的getXsetX。相反,应当直接对变量进行操作。
    如果要操作的对象不能或不适合直接操作,可以使用内建的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.xC.x = valuedel C.x时就会分别调用这三个方法。

  • 相关阅读:
    [BZOJ 1833] 数字计数
    [Codeforces 23E] Tree
    [Codeforces 23D] Tetragon
    前端基础之CSS
    前端基础之HTML
    youku项目总结(粗略总结)
    MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引
    MySQL多表查询,Navicat使用,pymysql模块,sql注入问题
    MySQL单表查询
    MySQL表关系--外键
  • 原文地址:https://www.cnblogs.com/CodeCabin/p/3963798.html
Copyright © 2011-2022 走看看