算数运算符

一元运算符

__neg__ -、__pos__ +、__abs__ abs()

众多比较运算符

__lt__ <、__le__ <=、__eq__ ==、__ne__ !=、__gt__ >、__ge__ >=

算术运算符

 __add__ +、__sub__ -、__mul__ *、__truediv__ /、__floordiv__ //、__ mod__ 、 __divmod__ divmod()、__pow__ ** 或 pow()、__round__ round()

反向算术运算符

__radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、                     __rdivmod__、__rpow__

增量赋值算术运算符

__iadd__、__isub__、__imul__、__itruediv__、__ifloordiv__、__imod__、 __ipow__

位运算符

__invert__ ~、__lshift__ <<、__rshift__ >>、__and__ &、__or__ |、__ xor__ ^

反向位运算符

__invert__ ~、__lshift__ <<、__rshift__ >>、__and__ &、__or__ |、__ xor__ ^

增量赋值位运算符

__ilshift__、__irshift__、__iand__、__ixor__、__ior_

非算数运算符

字符串 / 字节序列

表示形式

__repr__、__str__、__format__、__bytes__

数值转换

__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__

集合模拟

__len__、__getitem__、__setitem__、__delitem__、__contains__

迭代枚举

__iter__、__reversed__、__next__

可调用模拟

__call__

上下文管理

__enter__、__exit__

实例创建和销毁

__new__、__init__、__del__

属性管理

__getattr__、__getattribute__、__setattr__、__delattr__、__dir__

属性描述符

__get__、__set__、__delete__

跟类相关的服务

 __prepare__、__instancecheck__、__subclasscheck__

__ repr__,__ str__

_ repr __ 所返回的字符串应该准确、无歧义,并且尽可能表达出如何用代码创建出这个被 打印的对象。因此这里使用了类似调用对象构造器的表达形式(比如Vector(3, 4)就是个 例子)。

__ repr__ 和 __ str __ 的区别在于,后者是在 str() 函数被使用,或是在用 print 函数打印 一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好。

__ del __ 与 弱引用

__ del __ 不会删除对象,而是删除对象的引用。执行 del 操作后可能会导致对象不可获取,从而被垃圾回收机制删除。

Python 没有直接销毁对象的机制,CPython 中的垃圾回收主要依靠引用计数,后来实现了分代垃圾回收程序,它能把引用循环中不可获取的对象销毁。

弱引用不会增加对象的引用数量。不会妨碍所指对象被当作垃圾回收。

(WeakValueDictionary 类 实现的是一种可变映射,里面的值是对象的弱引用。被引用的对象在程序中的其他地方被当作垃圾回收后,对应的键会自动从 WeakValueDictionary 中删除。因此,WeakValueDictionary 经常用于缓存)

弱引用的局限

不是每个 Python 对象都可以作为弱引用的目标(或称所指对象)。基本的 list 和 dict 实 例不能作为所指对象,但是它们的子类可以轻松地解决这个问题.

但是,int 和 tuple 实例不能作为弱引用的目标,甚至它们的子类也不行。这些局限基本上是 CPython 的实现细节,在其他 Python 解释器中情况可能不一样。

__ slots __

默认情况下,Python 在各个实例中名为 dict 的字典里存储实例属性。

通过设置 slots ,阻止实例创建 dict 成员。解释器仅为指定成员分配内存空间

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class X:__slots__ = ('a','b')def __init__(self,a):self.a = a

主要作用是为了创建海量数据时,提升效率,对于非指定的对象,不开辟内存空间。

对 slots 的修改并不会影响类创建时设定的内存分配策略。

总之,如果使用得当,slots 能显著节省内存,不过有几点要注意。

  • 每个子类都要定义 slots 属性,因为解释器会忽略继承的 slots 属性。

  • 实例只能拥有 slots 中列出的属性,除非把 ‘dict’ 加入 slots 中(这样做就失去了节省内存的功效)。

  • 如果不把 ‘weakref’ 加入 slots,实例就不能作为弱引用的目标。

__ cal __

来控制对象的创建过程

单例

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class My(type):obj = Nonedef __call__(self, *args, **kwargs):if not My.obj:obj = object.__new__(self)self.__init__(obj, *args, **kwargs)My.obj = objreturn My.objclass  Printer(metaclass=My):

装饰器

from functools import wrapsclass decorate:def __init__(self, name):        self.name = name    def __call__(self, func):        @wraps(func)def deco(*args, **kwargs):if self.name == 'Admin':passelif self.name == 'Student':pass)elif self.name == 'Teacher':passreturn func(*args, **kwargs)return deco@decorate('Admin')
@decorate('Student')
@decorate('Teacher')

Python的双下划方法相关推荐

  1. python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...

    双下方法 双下方法是开发python这个语言程序员用的,源码中使用的. 我们不能轻易使用双下方法.可能重新写object的源码,慎用!!! 双下方法特征:你不知道干啥了,就会触发某个双下方法 len ...

  2. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略

    Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略 目录 双下划线介绍 1.关于双下划线的函数或方法或属性 双下划线介绍 1.关于双下划线的函数或方法或属性 __name_ ...

  3. Python面向对象反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  4. python 面向对象之:反射,双下方法

    函数vs 方法 # 1 通过函数名可以大致判断 # print(func) # <function func at 0x00000000005D1EA0> 函数 # obj = A() # ...

  5. python之路-双下方法

    双下方法 定义: 双下方法是特殊方法,他是解释器提供的,由双下线加方法名加双下划线 __方法名__具有特殊意义的方法 双下方法主要是Python源码程序员使用的,元编程 我们在开发中尽量不要使用双下方 ...

  6. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  7. python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理

    一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...

  8. python之面向对象反射和双下方法

    面向对象之反射,双下方法 反射 定义:主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中一切皆对象(都 ...

  9. Python 第二十六章 面向对象 元类+反射+双下方法

    元类 class A:pass obj = A() print(type('abc')) print(type([1,2,3])) print(type((22,33)))# type 获取对象从属于 ...

最新文章

  1. 在Dev C++中使用c语言图形库的配置
  2. 2018 青岛网络赛C题Halting Problem
  3. php 数组重复最多,PHP获取数组中重复最多元素的简单示例
  4. Luogu 1970 NOIP2013 花匠 (贪心)
  5. 魅族Flyme5系统内置原生铃声免费下载
  6. 自创本派高考理数试题集现在发布
  7. HTML5游戏开发进阶指南.pdf
  8. Coded UI Test(二)创建一个Coded UI Test
  9. Linux下qt程序部署到ARM开发板上: error: Upload of file “你的程序“ failed. The server said: “Failure
  10. 基于ssm框架的绩效管理系统
  11. 如何使用Python从视频中提取图像?(帧提取)详细代码实现
  12. 未来第五代计算机的发展方向,走进新时代 从五代酷睿看未来电脑发展
  13. 一步步学习SPD2010--第一章节--探索SPD2010(3)--理解SharePoint Designer 2010新功能
  14. 海王算法(看完不会变成海王)
  15. 阿里云周宇:神龙计算平台智能运维体系建设
  16. 线性代数让我想想:三阶行列式计算优化策略
  17. keras冻结_keras ”冻结“ 网络层
  18. 计算机网络学习笔记(一)应用层、传输层和网络层数据平面
  19. Android屏幕适配 - 屏幕基础理论知识笔记;res资源文件命名与匹配规则
  20. Linux ps 命令使用介绍

热门文章

  1. 计算机网络学习笔记——第二章 网络数据通信
  2. Rome2rio:帮助旅游者提供最佳的出游路线
  3. ENVI_IDL:批量对Modis Swath产品进行均值运算+解析
  4. Mac10.14.4 独立显卡 影驰GTX 760 4GB成功驱动
  5. k8s部署-45-k8s共享存储(上)
  6. WHMCS和免费的域名托管服务模板-Hostlar v10.0.1
  7. 发些今年的作品:网络斗地主
  8. 爬取淘宝交易记录的爬虫
  9. 房地产要不要成本信息化
  10. 四川2020计算机本科录取分数线,2020年四川高考本科一批及一本录取时间和投档录取分数线统计...