Python中的下划线的定义

在本文中,我将讨论常见的几种下划线模式和命名约定,以及它们如何影响Python程序的行为:

单前导下划线:_var:

(“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量。)

当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提示 - 意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。

下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。

这不是Python强制规定的。 Python不像Java那样在“私有”和“公共”变量之间有很强的区别。 这就像有人提出了一个小小的下划线警告标志,说:

“嘿,这不是真的要成为类的公共接口的一部分。不去管它就好。“

单后导下划线:_var:

单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。 PEP 8解释了这个约定

双前导下划线:__var

双前导和末尾下划线:var

“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据

image.png

python中以双下划线的是一些系统定义得名称,让python以更优雅得语法实行一些操作,本质上还是一些函数和变量,与其他函数和变量无二。
比如x.add(y) 等价于 x+y
有一些很常见,有一些可能比较偏,在这里罗列一下,做个笔记,备忘。
x.contains(y) 等价于 y in x, 在list,str, dict,set等容器中有这个函数
base, bases, mro, 关于类继承和函数查找路径的。
class.subclasses(), 返回子类列表
x.call(...) == x(...)
x.cmp(y) == cmp(x,y)
x.getattribute('name') == x.name == getattr(x, 'name'), 比getattr更早调用
x.hash() == hash(x)
x.sizeof(), x在内存中的字节数, x为class得话, 就应该是x.basicsize
x.delattr('name') == del x.name
dictoffset attribute tells you the offset to where you find the pointer to the dict object in any instance object that has one. It is in bytes.
flags, 返回一串数字,用来判断该类型能否被序列化(if it's a heap type), flags & 512
S.format, 有些类有用
x.getitem(y) == x[y], 相应还有setitem, 某些不可修改类型如set,str没有setitem
x.getslice(i, j) == x[i:j], 有个疑问,x='123456789', x[::2],是咋实现得
subclasscheck(), check if a class is subclass
instancecheck(), check if an object is an instance
itemsize, These fields allow calculating the size in bytes of instances of the type. 0是可变长度, 非0则是固定长度
x.mod(y) == x%y, x.rmod(y) == y%x
x.module , x所属模块
x.mul(y) == xy, x.rmul(y) == yx

reduce, reduce_ex , for pickle

slots 使用之后类变成静态一样,没有了dict, 实例也不可新添加属性

getattr 在一般的查找属性查找不到之后会调用此函数

setattr 取代一般的赋值操作,如果有此函数会调用此函数, 如想调用正常赋值途径用 object.setattr(self, name, value)

delattrsetattr, 在del obj.name有意义时会调用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,297评论 0 10
  • pyton review 学习指南 https://www.zhihu.com/question/29138020...
    孙小二wuk阅读 4,728评论 0 2
  • 教程地址:python进阶 - 慕课网 python函数式编程 变量可以指向函数: f = absprint(f)...
    竹口小生阅读 3,730评论 0 2
  • 今天,我在语文课上学到了:“只要肯动脑筋,坏事也能变成好事,还学到了,有困难也要请教他人。”法制课上学到了:“就...
    韩梦荧阅读 1,495评论 0 0
  • 凭借我不择手段的精神 所以学什么都特别认真 即使我知道 即便多努力用红酒漱个口就能知道产区 即便再明白红酒的品牌 ...
    李王爷阅读 3,579评论 0 0

友情链接更多精彩内容