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 08:54
下一篇 2017-11-20 19:59

相关推荐

  • 文本处理工具以及grep

    文本处理工具以及grep 我们在使用Linux系统的时候需要查看、分析或者统计文件,这时候我们就需要使用到文本处理工具。 我们先来看下几个文本处理工具的使用: 文件内容:less和 cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 我们先来看看less和cat cat:查看文件命令     用法: &nbsp…

    Linux干货 2016-08-08
  • 第二周-作业

    第二周作业: 题1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 Linux上常见的文件管理类命令有mkdir、touch、cp、mv、rm、stat。     mkdir:创建新目录         用法:mk…

    Linux干货 2016-12-08
  • 学习宣言

      人生还有很多精彩时刻,需要你去探寻,linux 就是这个深渊的入口,我其实已迫不及待,伙伴们别怕,跟我来,一路披荆斩棘,踏寻生命的足迹!Fighting!

    Linux干货 2016-10-25
  • 马哥教育网络班第21期+第四周课程作业

    1. 复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -r /etc/skel /home/tuser1 chmod –R 700 /home/tuser1 2. 编辑/etc/group文件,添加组hadoop。 echo &q…

    Linux干货 2016-08-01
  • liunx学习第一天知识点-基础知识

    一 计算机组成 1. 冯·诺依曼体系:     1946年数学家冯·诺依曼于提出计算机由五大部分组成:运算器、控制器、存储器、输入设备、输出设备 2. 摩尔定律:     戈登·摩尔于1965年提出来当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,…

    Linux干货 2016-07-27
  • MySQL优化大全

     1. 优化SQL   1)通过show status了解各种sql的执行频率         show status like 'Com_%'        了解 Com_select,Com_in…

    Linux干货 2015-04-13