通过__开始的属性感觉分为两种类型:

利用dir调用的时候:

< build in x object at 0x01F116B0>:这种貌似和运算符重载有关系,用户如果需要的话可以重写该函数

<method-wrapper '__eq__' of x object at 0x01F116B0>:这种应该是内部的实现机制,可以直接调用。

1,__name__

环境属性,不需要调用者,如果是在顶层文件,那么显示__main__,如果是模块文件,显示当前类名

2,__class__

如果是类调用,显示type<class>;如果是实例调用,显示实例对应的类名

3,__bases__

类来调用,显示超类名

4,__init__

构造函数

5,__getitem__

索引、分片时候调用此方法,成员关系测试in,列表解析,内置函数map,列表和元组赋值运算以及类型构造方法也会调用__getitem__(如果定义了的话)

6,__iter__

所有的迭代环境都会尝试此方法,再尝试getitem

迭代环境是通过内置函数iter去尝试寻找__iter__方法来实现,这种方法应该实现一个迭代器对象,如果提供了该方法,python就会重复调用该迭代器的next方法,直到发生StopIteration异常。如果没有定义该方法,python会改用getitem机制,知道引发IndexError异常

如果用户自定义的迭代器,由自己来决定支持一个、单个或是多个活跃的迭代,如果要达到多个迭代器的效果,__iter__只需要替迭代器定义新的状态对象,而不是返回self

7,__contains__

重写该方法用来判断成员关系,此时,该方法由于__iter__方法,__iter方法优于__getitem__方法

8,__getattr__和__setattr__

__getattr__拦截属性点号运算

__setattr__拦截属性赋值语句,如果定义了该方法

那么self.attr=value就会变成self.__setattr__('attr',value);

9,__str__和__repr__

打印操作会首先尝试__str__,它通常应当返回一个用户友好的显示

__repr__用于所有其他环境,相比较而言它更底层

二者都必须返回字符串,__str__只对于打印操作顶层的时候才试用,如果嵌套到较大的对象,那么应当使用__repr__(p728)

10,__call__

当实例调用方法的时候,运行__call__方法,这在编写api接口的时候,很有用,大概是出了__init__,__str__,__repr__之外,最常用的运算符重载方法了(关于这个有点晕)

11, 比较运算符:__gt__,__lt__

12,bool判断:__bool__,__len__

判断实例布尔特性的方法:__bool__,如果没有这个方法,python会退而求其次,判断__len__。因为将一个非空对象看作为真

13,析构函数__del__

不过因为python具有自己的垃圾回收机制,析构函数一般很少使用

对于运算符重载的那些,每一种方法和一种特定的方法调用具有映射关系,通过“拦截”内置的操作,实现运算符重载功能

python双划线类型的更多相关文章

  1. Python中下划线---完全解读(转)

      Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx ...

  2. Python下划线与命名规范

    Python下划线与命名规范 先看结论,节省只想知道答案你的宝贵时间: _xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量.即保护类型只能 ...

  3. Python中下划线的使用方法

    本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用 ...

  4. Python下划线的使用

    References: [1]. http://python.jobbole.com/81129/ 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划 ...

  5. Python下划线的详解

    本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用 ...

  6. python(58):python下划线

    详解Python中的下划线 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情 ...

  7. 2.python的文件类型、变量数值和字符串练习

    1.python的文件类型 .源代码 -python 源代码文件以"py"为扩展名,由python程序解释,不需要编译. 2.字节代码(编译的) -python源码文件经编译后生成 ...

  8. Python下划线简介

    Python中下划线的5种含义 分享一篇文章:The Meaning of Underscores in Python. 本文介绍了Python中单下划线和双下划线("dunder" ...

  9. python下划线的5种含义

    本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类. 单下划 ...

随机推荐

  1. [USACO13OPEN]照片Photo 题解

    题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...

  2. 初相识|performance_schema全方位介绍

    初相识|performance_schema全方位介绍 |导 语 很久之前,当我还在尝试着系统地学习performance_schema的时候,通过在网上各种搜索资料进行学习,但很遗憾,学习的效果并不 ...

  3. kafka 教程(三)-远程访问

    远程连接 kafka 配置 默认的 kafka 配置是无法远程访问的,解决该问题有几个方案. 方案1 advertised.listeners=PLAINTEXT://IP:9092 注意必须是 ip ...

  4. Elasticsearch入门教程(四):Elasticsearch文档CURD

    原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  5. Jade学习(三)之语法规则下

    jade可以自动识别单双标签 // 1.jade内容: input(type="button", value="点击") div // 此时输出❌error:i ...

  6. hadoop面试复习笔记(1)

    0.Mappereduce采用的是Master/Slaves模型 1.Hadoop是一个开源软件框架,支持支持大数据集的存储和处理.Apache Hadoop是存储和处理大数据的解决方案你是因为: ( ...

  7. 阿里云云效平台使用——Windows上使用阿里云云效(RDC)Git拉取代码

    转载:https://blog.csdn.net/for_my_life/article/details/88700696 SSH key配置 1.首先从开始菜单里面打开刚刚安装完成的Git目录下Gi ...

  8. The authenticity of host 'github.com (52.74.223.119)' can't be established.

    出现这种错误的问题应考虑是否配置ssh,若没有配置,则进行相关配置 若配置后还出现这种问题,这是由于本地缺少一个文化夹.直接yes而不是y或是回车

  9. PAT Basic 1086 就不告诉你 (15 分)

    做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式: 输入在第一行给出两个不超过 10 ...

  10. gd_t结构 bd_t结构

    gd_t在u-boot-2018.07-fmxx/include/asm-generic/global_data.h中定义 typedef struct global_data {    bd_t * ...