1.运算符重载之反向运算

class A:
def __init__(self,x):
self.x = x def __add__(self, other):
try:
x = other.x
return self.x + other.x
except AttributeError:
try:
x = int(other)
except:
x = 0
return A(self.x + x) def __iadd__(self, other):
print(self,'iadd')
return A(self.x + other.x) def __radd__(self, other):
print(self,'radd')
return self.x + other.x
def __repr__(self):
return '{}'.format(self.x)
#a + 1 ;;; 1+a
a = A(4)
b = A(5)
print("-----------end----------------")
print((a+'abc').x) # a.__add__(1) 1时int没有self.x属性 抛出异常 '''
1+a 等价于
1.__add__(a) int也实现了__add__方法 ,这个方法对这种的加法返回值时notimplement
解释器发现这个值就会发起对第二个参数a的__radd__方法
'''
'''
__add__ 第一个try语句解决了 传入的 1是int类型没有x属性报属性异常,
第二个try 是解决传入的字符串问题,如果传人字符串设置x = 0 不抛出异常
'''

2.__slots__问题引出、

1.字典为提升查询效率必须用空间换时间
2.一般来说一个对象,属性多一i但,都存储在字典中便于查询
3.但是如果数百万个对象,那么字典占得就很大了
4.考虑把属性字典__dict__省了
5.提供__slots__ __slots__告诉解释器,实例的的属性都叫什么,一般来说既然节省内存,还是使用元祖比较好
一旦类提供了__slots__,就组织了实例产生__dict__来保存实例
也不可以动态增加属性
不影响子类实例,不会继承下去,除非子类也自己定义了__slots__ 应用场景
使用构建在数百万上的对象,且容量较为紧张,实例的属性简单,固定且不用增加动态场景

 

class A:
x = 1
__slots__ = ('z','y')
def __init__(self):
self.y = 6
self.z = 7

Python之__slots__ &运算符重载反向运算的更多相关文章

  1. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

  2. Python中类的运算符重载

    这篇文章仅仅是总结性质的,待以后有时间的时候会针对比较难理解的部分补充一些例子. 构造和析构 __init__ __del__ 函数调用 __call__ 打印操作 __str__ __repr__ ...

  3. Python全栈工程师(异常(高级)、运算符重载)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...

  4. C++学习笔记之运算符重载

    一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...

  5. python基础之01数据类型-变量-运算浅解

    python的数据类型 1  数字 数字分为整型(int),长整型(long),浮点型(float),复数(complex) 整型较为常用的功能: >>> a=-4 >> ...

  6. python运算符重载(二)

    一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...

  7. python运算符重载

    python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...

  8. python学习笔记(五)——静态方法、类方法、运算符重载

    我们都知道类名是不能够直接调用类方法的.在C++中,把成员方法声明为 static 静态方法后可以通过类名调用.同样的在python中也可以通过定义静态方法的方式让类名直接调用. 静态方法 使用 @s ...

  9. [b0018] python 归纳 (四)_运算符重载

    # -*- coding: UTF-8 -*- """ 测试运算符重载 加法 总结: python 运算符表达式其实都是调用 类中方法 __xxx__ + <--- ...

随机推荐

  1. git 中merge的用法

    git merge –no-ff 可以保存你之前的分支历史.能够更好的查看 merge历史,以及branch 状态. git merge 则不会显示 feature,只保留单条分支记录.

  2. Glide和Govendor安装和使用

    两个都是Go的包管理工具,二选一 Glide参考:golang 依赖管理 /etc/profile #Go export GOROOT=/home/lintong/software/go export ...

  3. 终于把eShopOnContainer部署成功了。

    先上图说明一下,然后把步骤一部一部写上来吧.

  4. redis在php中的基本使用

    //使用autoload加载相关库,这边重点就是为了require $file; spl_autoload_register(function($class) { $file = __DIR__.’/ ...

  5. k8s(6)-滚动更新

    用户希望应用程序始终可用,开发人员应该每天多次部署新版本的应用程序.在Kubernetes中,这是通过滚动更新完成的.滚动更新允许通过使用新的实例逐步更新Pods实例来实现部署的更新,从而实现零停机. ...

  6. IE8下动态生成option无法设置文本内容

    问题: 1.在IE8下,JS动态添加 option 的时候,value 有值,但是文本内容添加不上 例:<option value="北京"></option&g ...

  7. Spring AOP @AspectJ进阶

    @AspectJ可以使用切点函数定义切点,我们还可以使用逻辑运算符对切点进行复核运算得到复合的切点,为了在切面中重用切点,我们还可以对切点进行命名,以便在其他的地方引用定义过的切点.当一个连接点匹配多 ...

  8. 让height: 100%生效

    html: <body> <div class="box"></div> </body> css: .box{ position: ...

  9. LPVOID 没有类型的指针

    可以将LPVOID类型的变量赋值给任意类型的指针,比如在参数传递时就可以把任意类型传递给一个LPVOID类型为参数的方法,然后在方法内再将这个“任意类型”从传递时的“LPVOID类型”转换回来. 示例 ...

  10. 浅谈Vue 项目性能优化 经验

    我优化公司的项目总结的几点: 1.先查看引入的图片大小,如果太大了,可以压缩,压缩路径:https://zhitu.isux.us/ 2.代码包优化, 待下项目开发完成.进行打包源码上线环节,需要对项 ...