浅谈Python中带_的变量或函数命名
作者:再见紫罗兰 发布时间:2023-08-30 15:44:08
Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格。这样就易于阅读,易于在程序员之间交流。
python中的标识符可以包含数字、字母和_,但必须以字母或者_开头,其中以_开头的命名一般具有特殊的意义。
前后均带有双下划线__的命名
一般用于特殊方法的命名,用来实现对象的一些行为或者功能,比如__new__()方法用来创建实例,__init__()方法用来初始化对象,
x + y操作被映射为方法x.__add__(y),序列或者字典的索引操作x[k]映射为x.__getitem__(k),__len__()、__str__()分别被内置函数len()、str()调用等等。
仅开头带双下划线__的命名
用于对象的数据封装,以此命名的属性或者方法为类的私有属性或者私有方法。
class Foo(object):
def __init__(self):
self.__name = 'private name'
def getname(self):
return self.__name
def __spam(self):
print 'private method'
def bar(self):
self.__spam()
如果在外部直接访问私有属性或者方法:
>>> f = Foo()
>>> f.__name
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
f.__name
AttributeError: 'Foo' object has no attribute '__name'
>>> f.__spam()
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
f.__spam()
AttributeError: 'Foo' object has no attribute '__spam'
是不可行的,这就起到了隐藏数据的作用,但是这种实现机制并不是很严格,机制是通过自动"变形"实现的,类中所有以双下划线开头的名称__name都会自动变为"_类名__name"的新名称:
>>> f._Foo__name
'private name'
>>> f._Foo__spam()
private method
这样就可以访问了。
这种机制可以阻止继承类重新定义或者更改方法的实现,比如,定义一个Foo的派生类:
class Goo(Foo):
def __spam(self):
print 'private method of Goo'
重写了__spam方法,运行:
>>> g = Goo()
>>> g.bar()
private method
调用bar()方法的时候依然执行的是Foo类的__spam()方法,因为在bar()方法的实现中,self.__spam()已自动变形为self._Foo__spam(),Goo继承的bar()方法也是如此。
以单下划线_开头的命名
一般用于模块中的"私有"定义的命名。
from module import * 语句用于加载模块中的所有名称,要控制导入的名称,一种方法是定义列表__all__,只有在__all__中的名称才能通过*导入,
另一种方法就是以单下划线开头命名定义了,这种定义不会被*导入。
当然,在类中也可以用单下划线开头来命名属性或者方法,这只是表示类的定义者希望这些属性或者方法是"私有的",但实际上并不会起任何作用。
来源:http://www.cnblogs.com/linxiyue/p/7944871.html


猜你喜欢
- 前言在我们的日常开发中, 常用的中间件有很多, 今天来讲一下怎么集成限流中间件, 它可以很好地用限制并发访问数来保护系统服务, 避免系统服务
- ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象(即影响th
- PHP原型模式Prototype Pattern是什么原型模式是一种创建型模式,它可以通过复制现有对象来创建新的对象,而无需知道具体的创建过
- 当你想快速共享一个目录的时候,这是特别有用的,只需要1行代码即可实现。FTP 服务器,在此之前我都是使用Linux的vsftpd软件包来搭建
- 本文结合OpenCV官方样例,对官方样例中的代码进行修改,使其能够正常运行,并对自己采集的数据进行实验和讲解。一、准备OpenCV使用棋盘格
- Sqlserver2005日志文件太大,使其减小的方法如下所示:运行下面的三行 dbName为数据库名: backup log dbName
- 只添加了一些自己想到的常用的功能,欢迎大家补充添加自己的好的思路. 通用的正则和方法可以写在RegExpObj中,
- 如下所示:numpy.power(x1, x2)数组的元素分别求n次方。x2可以是数字,也可以是数组,但是x1和x2的列数要相同。 >
- 一个转换程序,简单的把DNA序列中的A转变成T,第一种情况没有使用私有变量。#!/bin/perl#下面是一段DNA序列 $DN
- 开门见山,直接使用 skimage 库为图像添加高斯噪声是很简单的:import skimageorigin = skimage.io.im
- Python 中的 Operator 模块可以让它支持函数式编程。1 计算函数假设我们需要一个计算阶乘的函数,一般做法是使用递归。如果使用函
- 如何拖拽文件到指定位置,具体方法如下在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上代码完整代码:<!DO
- tcp粘包产生的原因这里就不说了,因为大家能搜索TCP粘包的处理方法,想必大概对TCP粘包有了一定了解,所以我们直接从处理思路开始讲起tcp
- 今天介绍一下 go语言的并发机制以及它所使用的CSP并发模型CSP并发模型CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过
- 1.基本结构 create OR REPLACE PROCEDURE存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBE
- 本文实例讲述了python中list循环语句用法。分享给大家供大家参考。具体用法分析如下:Python 的强大特性之一就是其对 list 的
- 简介pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和
- 爬虫简介 根据百度百科定义:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社
- 在matplotlib官网看到了第三方库numpngw的简介,利用该库作为插件可以辅助matplotlib生成png动画。numpngw概述
- Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下:1.在python安装目录的Lib