一、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中的下划线及双下划线相关推荐

  1. python中的下划线_Python中的下划线详解

    这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...

  2. python中长下划线_Python中的下划线详解

    这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...

  3. python怎么打出长下划线_Python 中的各种下划线操作你了解吗?

    原标题:Python 中的各种下划线操作你了解吗? 我们在定义一些变量或者方法的时候,常常会用到下划线.在 Python 中,下划线的出镜率非常高,比如变量,有些是一个下划线开头的(_xx),有些是两 ...

  4. python中sort函数源代码_Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  5. python购物车结算不了_python中购物车

    python的基础语法 python数据类型:(按特征划分) 数字类型: 1.整形:布尔形.长整型L.标准整形 2.非整形:双精度型.复数.decimal(不是内建类型) 序列类型: 1.字符串(st ...

  6. python怎么用q退出_python中退出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! for循环elsefor循环如果正常结束的时候,才会结束else语句#! usr ...

  7. python中合法变量名_python中的合法变量名有什么规则

    python中合法变量名的规则有:1.可以由字母.数字.下划线组成,同时,不能以数字开头:2.不能是python关键字,但可以包含关键字:3.不能包含空格.例如:[a1c_x2z]. Python 需 ...

  8. python中函数的作用域_Python中的函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...

  9. python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法

    MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库 ...

  10. python里的join方法_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...

最新文章

  1. 你什么时候使用git rebase而不是git merge?
  2. vue+antdesign导航菜单动态加载
  3. Android智能手机屏蔽电话与屏蔽安装软件功能
  4. 专题 10 时钟与信号
  5. vuedraggable示例_vue拖拽列表vuedraggable
  6. ubuntu nfs
  7. SAP gateway GWaaS single sign on
  8. python怎么解释语言_python是解释型语言吗
  9. JWT认证不通过导致不能访问视图的解决方案
  10. [蓝点zigBee] CC2530 实用教程总览
  11. 中国烤箱盘行业市场供需与战略研究报告
  12. bs架构多用户访问_Spark架构
  13. activiti7---候选人
  14. 怎样在Excel中添加水印?学会这个方法可以轻松搞定
  15. 2018年俄罗斯世界杯之Java数据爬虫(一)
  16. 【UE4】 自定义编辑器的放置Actor窗口
  17. 电脑C盘满了如何扩充C盘内存?
  18. 在树莓派上安装配置远程摄像头监控motion
  19. React Native入门——布局实践:开发京东客户端首页
  20. Auto.js 找图 找色 剪切图片 坐标区域计算方法

热门文章

  1. call方法apply方法
  2. 深入理解public static ltTgt T max(Collectionlt? extends Tgt coll,Comparator lt? super Tgt comp)
  3. FCC Part 25.203 卫星地球站站址和频率的选择—申请材料(3)
  4. Python爬虫热点项目之实现代理IP池(IP proxy pool)
  5. 2019年回顾及总结
  6. 星淘惠跨境—亚马逊产品链接因为敏感词而被下架怎么办?
  7. 启用Ubuntu 服务器上的 mDNS
  8. excel组合汇总_Excel汇总20131125
  9. springboot毕设项目城市天然气管理系统 p355v(java+VUE+Mybatis+Maven+Mysql)
  10. SpringBoot实现定时发送邮件