python双划线类型
通过__开始的属性感觉分为两种类型:
利用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双划线类型的更多相关文章
- Python中下划线---完全解读(转)
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx ...
- Python下划线与命名规范
Python下划线与命名规范 先看结论,节省只想知道答案你的宝贵时间: _xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量.即保护类型只能 ...
- Python中下划线的使用方法
本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用 ...
- Python下划线的使用
References: [1]. http://python.jobbole.com/81129/ 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划 ...
- Python下划线的详解
本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用 ...
- python(58):python下划线
详解Python中的下划线 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情 ...
- 2.python的文件类型、变量数值和字符串练习
1.python的文件类型 .源代码 -python 源代码文件以"py"为扩展名,由python程序解释,不需要编译. 2.字节代码(编译的) -python源码文件经编译后生成 ...
- Python下划线简介
Python中下划线的5种含义 分享一篇文章:The Meaning of Underscores in Python. 本文介绍了Python中单下划线和双下划线("dunder" ...
- python下划线的5种含义
本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类. 单下划 ...
随机推荐
- 区间和序列上的dp
区间上的dp状态设计最基本的形式: \(F[i]\)表示以i结尾的最优值或方案数. \(F[i][k]\)表示以i结尾附加信息为k的最优值或方案数. 当然可以有多维附加信息. 转移的话往往是枚举上一个 ...
- 洛谷 - P3469 - BLO-Blockade - 割点
https://www.luogu.org/problem/P3469 翻译:一个原本连通的无向图,可以删除图中的一个点,求因为删除这个点所导致的不连通的有序点对的数量.或者说,删去这个点之后,各个连 ...
- [wpf] collectionViewsource 排序 和分组
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" xmlns:swd="clr-n ...
- vue-mixins和vue高阶组件
我们在开发过程中,因为需求的变更,往往会遇见对现有组件的改造和扩展. 那么我们有什么方法对现有组件进行改造和扩展呢? 常见的我们可以使用mixins方式 下面就让我们来看一下怎么使用mixins方式对 ...
- 使用vue-cli脚手架快速构建项目
1.创建一个文件夹,vscode打开 2.ctr + shift+` 打开指令窗口 3.npm i vue-cli -g 安装vue-cli 4.vue -V 测试安装版本 检查是否安装成功 5. ...
- 3、sql 表的连接
摘自: https://blog.csdn.net/holly2008/article/details/25704471 表连接分为:CROSS JOIN.INNERT JOIN.OUTER JOIN ...
- spring boot基础学习教程
Spring boot 标签(空格分隔): springboot HelloWorld 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 ...
- nginx.conf laravel 配置
server { listen 443; server_name www.liuhuanguang.cn; #填写绑定证书的域名 ssl on; ssl_certificate cert/1_www. ...
- PAT Basic 1086 就不告诉你 (15 分)
做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式: 输入在第一行给出两个不超过 10 ...
- Codeforces1238E. Keyboard Purchase(状压dp + 计算贡献)
题目链接:传送门 思路: 题目中的m为20,而不是26,显然在疯狂暗示要用状压来做. 考虑状压字母集合.如果想要保存字母集合中的各字母的顺序,那就和经典的n!的状态的状压没什么区别了,时间复杂度为O( ...