python面向对象魔术方法

python面向对象魔术方法

创建:__init__
销毁:__del__

哈希:__hash__
当__hash__ =None时,该类的实例不可哈希
hash值相同不能确定2个对象相同,要__eq__来判断是否相同。

波尔:__bool__,返回的类型为bool,如果没有定义__bool__,看__len__的返回长度,非0为真,如果__len__也没定义,所有实例都返回真。
可视化:__repr__,__str__
若只定以一种,定义__repr__

运算符重载:
<:__lt__、<=:__le__、==:__eq__、>:__gt__、>=:__ge__、!=:__ne__
+:__add__、-:__sub__、*:__mul__、/:__truediv__、%:__mod__、//:__floordiv__、**:__pow__

容器方法:
__iter__:返回一个新的迭代器对象
__getitem__:实现self[key]访问,key不存在引发异常
__setitem__:和__getitem__类似,设置值的方法
__missing__:dict使用__getitem__()调用时,key不存在不报错,执行该方法

可调用对象:
__call__:类中定义了该方法,实例可以像函数一样调用
类中定义了__call__,可以实现把类变成类装饰器

上下文管理:
__enter__和__exit__都定义
__enter__的返回值会变成with语法中的变量(f)
使用 with class() as f:pass调用上下文方法。
定义了上下文管理的类,with语法可以开启一个上下文环境,执行前做一些工作,执行后也做一些工作。可以把其当成一个类装饰器。

反射:
一个对象在运行时可以找出其类型的信息。
具有反射能力的函数:type(),isinstance(),callable(),dir(),getatter()等。
内建函数:
getattr(object,name,default):通过name返回object的属性值,当属性不存在时,返回default,如果没有default,则抛出AttributeError。name必须为字符串
setattr(object,name,value):object的属性存在,则覆盖,不存在,新增
hasattr(object,name):判断对象是否有这个name的属性
反射相关的魔术方法:
__getattr__():一个类的属相会按照继承关系找,如果找不到,就会执行__getattr__方法,如果没有这个方法,就会抛出AttriuteError
__setattr__():可以阻止通过实例增加、修改属性的操作。实例通过点设置属性,如self.x=x,就会调用__setattr__(),而不会直接加到其__dict__中,属性要加到实例的__dict__中,需要自己完成
__delattr__():可以阻止通过实例删除属性的操作
__getattriute__():可以阻止通过实例查找属性的操作,实例的所有属性访问,都会先调用__getattriute__方法

描述器:
用到了三个魔术方法:__get__(),__set__(),__delete__()
一个类含有__get__(),__set__(),__delete__()三个方法中的任意一个,这个类就是描述器
如果仅实现了__get__(),就是非数据描述器
同时实现了__get__()和__set__()就是数据描述器
**如果一个类的类属性是一个描述器的实例,访问这个类属性就会调用__get__方法**
owner就是这个类
**如果描述器是非数据描述器,这个owner的实例的字典优先级高于描述器,如果描述器是数据描述器,这个owner的实例的字典优先级低于于描述器**

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88721

(0)
10590628461059062846
上一篇 2017-11-20
下一篇 2017-11-20

相关推荐

  • N26-第一周博客作业

    第一周博客作业 一、计算机的组成及其功能 计算机的组成可分为硬件、软件两部分。 硬件部分: 按冯.诺伊曼提出的计算机体系,计算机可分为五个部分,分别是:控制器、运算器、存储器、输入设备、输出设备。 CPU:由运算器及控制器组成。 控制器:发出决策指令,协调和指挥计算机各部件的工作。 运算器:对数据进行加工,主要进行算数运行、逻辑运算。 存储器:分为内存储器和…

    2017-02-17
  • CentOS 更改改网卡名称

    1 查看你的CentOS7网卡名字叫什么(通常第一个网卡叫做eno16777736) ip addr 2 编辑配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 把配置文件里面所有eno16777736改为eth0 3 把网卡配置文件名字也修改一下 cd /etc/sysconfig/networ…

    2018-01-18
  • 22期网络班+第一周作业+深圳+王金宝

    1、描述计算机的组成及其功能? 答: 显示器和主机,显示器就不说了 主机里又有,主板,又叫主机板(mainboard)、系统板(systembourd)和母板(motherboard);它安装在机箱内,是微机最基本的也是最重要的部件之一。主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关 接口、指…

    Linux干货 2016-08-13
  • shell脚本实现MD5破解的相关小计

    分享编写shell脚本暴力破解md5的方法 方法一 单个破解法(以10位数为例) #!/bin/bash read -p “please input strings:”string for n in {0..33000} do Md5=`echo $n |md5sum|cut -c 1-10`      …

    Linux干货 2017-03-26
  • DNS高级应用之ACL和View

    一、环境准备:     1、准备三台主机,要求如下      (1) DNS服务器双网卡:eth0:192.168.10.203  eth1: 172.16.2.10       (2)测试机1双网卡: eth0: 172.16.…

    Linux干货 2015-06-01
  • 4.Linux权限管理与grep命令应用

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。        cp -r /etc/skel /home/tuser1        chmod 700 /home/tuser1  …

    Linux干货 2017-07-23