python中双下划线_python中的下划线及双下划线
一、Python 用下划线作为变量前缀和后缀指定特殊变量
1. 单下划线开头:
_xxx:弱“内部使用”标识,如:”from Module import *”,将不导入所有以下划线开头的对象,包括包、模块、成员
2. 双下划线开头:
__xxx:模块内的私有成员,外部无法直接调用。
即:私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
3. 双下划线开头和结尾:
__xxx__ :系统定义名字, 用户无法控制的命名空间中的“魔术”对象或属性, 如:
__name__、__doc__、__init__、__import__、__file__等;
二、python常用的魔法方法及变量
转自:http://www.cnblogs.com/DxSoft/p/3506627.html
__new__: 是一个类的初始化过程中第一个被执行的方法。它创建了类,然后把一些参数传递给__init__
_init__(self, [...): 类的构造器,当初始构造方法被执行
__del__(self):如果 __new__ 和 __init__ 形成一个类的构造函数,__del__ 是就是析构函数
__str__(self):定义当 str() 被你的一个类的实例调用时所要产生的行为。
Magic
Method
何时被调用(例子)
Explanation
__new__(cls [,...])
instance = MyClass(arg1, arg2)
__new__ is called on instance creation
__init__(self [,...])
instance = MyClass(arg1, arg2)
__init__ is called on instance creation
__cmp__(self, other)
self == other, self > other, etc.
Called for any comparison
__pos__(self)
+self
Unary plus sign
__neg__(self)
-self
Unary minus sign
__invert__(self)
~self
Bitwise inversion
__index__(self)
x[self]
Conversion when object is used as index
__nonzero__(self)
bool(self)
Boolean value of the object
__getattr__(self, name)
self.name # name doesn‘t exist
Accessing nonexistent attribute
__setattr__(self, name, val)
self.name = val
Assigning to an attribute
__delattr__(self, name)
del self.name
Deleting an attribute
__getattribute__(self, name)
self.name
Accessing any attribute
__getitem__(self, key)
self[key]
Accessing an item using an index
__setitem__(self, key, val)
self[key] = val
Assigning to an item using an index
__delitem__(self, key)
del self[key]
Deleting an item using an index
__iter__(self)
for x in self
Iteration
__contains__(self, value)
value in self,value not in self
Membership tests using in
__call__(self [,...])
self(args)
"Calling" an instance
__enter__(self)
with self as x:
with statement context managers
__exit__(self, exc, val, trace)
with self as x:
with statement context managers
__getstate__(self)
pickle.dump(pkl_file, self)
Pickling
__setstate__(self)
data = pickle.load(pkl_file)
Pickling
三、 双下划线开头和结尾的函数及变量枚举:
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) == x*y, x.__rmul__(y) == y*x
__reduce__, __reduce_ex__ , for pickle
__slots__ 使用之后类变成静态一样,没有了__dict__, 实例也不可新添加属性
__getattr__ 在一般的查找属性查找不到之后会调用此函数
__setattr__ 取代一般的赋值操作,如果有此函数会调用此函数, 如想调用正常赋值途径用 object.__setattr__(self, name, value)
__delattr__ 同__setattr__, 在del obj.name有意义时会调用
Magic
Method
何时被调用(例子)
Explanation
__new__(cls [,...])
instance = MyClass(arg1, arg2)
__new__ is called on instance creation
__init__(self [,...])
instance = MyClass(arg1, arg2)
__init__ is called on instance creation
__cmp__(self, other)
self == other, self > other, etc.
Called for any comparison
__pos__(self)
+self
Unary plus sign
__neg__(self)
-self
Unary minus sign
__invert__(self)
~self
Bitwise inversion
__index__(self)
x[self]
Conversion when object is used as index
__nonzero__(self)
bool(self)
Boolean value of the object
__getattr__(self, name)
self.name # name doesn‘t exist
Accessing nonexistent attribute
__setattr__(self, name, val)
self.name = val
Assigning to an attribute
__delattr__(self, name)
del self.name
Deleting an attribute
__getattribute__(self, name)
self.name
Accessing any attribute
__getitem__(self, key)
self[key]
Accessing an item using an index
__setitem__(self, key, val)
self[key] = val
Assigning to an item using an index
__delitem__(self, key)
del self[key]
Deleting an item using an index
__iter__(self)
for x in self
Iteration
__contains__(self, value)
value in self,value not in self
Membership tests using in
__call__(self [,...])
self(args)
"Calling" an instance
__enter__(self)
with self as x:
with statement context managers
__exit__(self, exc, val, trace)
with self as x:
with statement context managers
__getstate__(self)
pickle.dump(pkl_file, self)
Pickling
__setstate__(self)
data = pickle.load(pkl_file)
Pickling
原文:http://www.cnblogs.com/tanql/p/3914583.html
python中双下划线_python中的下划线及双下划线相关推荐
- python中的下划线_Python中的下划线详解
这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...
- python中长下划线_Python中的下划线详解
这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...
- python怎么打出长下划线_Python 中的各种下划线操作你了解吗?
原标题:Python 中的各种下划线操作你了解吗? 我们在定义一些变量或者方法的时候,常常会用到下划线.在 Python 中,下划线的出镜率非常高,比如变量,有些是一个下划线开头的(_xx),有些是两 ...
- python中sort函数源代码_Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- python购物车结算不了_python中购物车
python的基础语法 python数据类型:(按特征划分) 数字类型: 1.整形:布尔形.长整型L.标准整形 2.非整形:双精度型.复数.decimal(不是内建类型) 序列类型: 1.字符串(st ...
- python怎么用q退出_python中退出
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! for循环elsefor循环如果正常结束的时候,才会结束else语句#! usr ...
- python中合法变量名_python中的合法变量名有什么规则
python中合法变量名的规则有:1.可以由字母.数字.下划线组成,同时,不能以数字开头:2.不能是python关键字,但可以包含关键字:3.不能包含空格.例如:[a1c_x2z]. Python 需 ...
- python中函数的作用域_Python中的函数作用域
在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...
- python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库 ...
- python里的join方法_python中join()方法介绍
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...
最新文章
- 你什么时候使用git rebase而不是git merge?
- vue+antdesign导航菜单动态加载
- Android智能手机屏蔽电话与屏蔽安装软件功能
- 专题 10 时钟与信号
- vuedraggable示例_vue拖拽列表vuedraggable
- ubuntu nfs
- SAP gateway GWaaS single sign on
- python怎么解释语言_python是解释型语言吗
- JWT认证不通过导致不能访问视图的解决方案
- [蓝点zigBee] CC2530 实用教程总览
- 中国烤箱盘行业市场供需与战略研究报告
- bs架构多用户访问_Spark架构
- activiti7---候选人
- 怎样在Excel中添加水印?学会这个方法可以轻松搞定
- 2018年俄罗斯世界杯之Java数据爬虫(一)
- 【UE4】 自定义编辑器的放置Actor窗口
- 电脑C盘满了如何扩充C盘内存?
- 在树莓派上安装配置远程摄像头监控motion
- React Native入门——布局实践:开发京东客户端首页
- Auto.js 找图 找色 剪切图片 坐标区域计算方法
热门文章
- call方法apply方法
- 深入理解public static ltTgt T max(Collectionlt? extends Tgt coll,Comparator lt? super Tgt comp)
- FCC Part 25.203 卫星地球站站址和频率的选择—申请材料(3)
- Python爬虫热点项目之实现代理IP池(IP proxy pool)
- 2019年回顾及总结
- 星淘惠跨境—亚马逊产品链接因为敏感词而被下架怎么办?
- 启用Ubuntu 服务器上的 mDNS
- excel组合汇总_Excel汇总20131125
- springboot毕设项目城市天然气管理系统 p355v(java+VUE+Mybatis+Maven+Mysql)
- SpringBoot实现定时发送邮件