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. 【2019年04月10日】股票的滚动市盈率PE最低排名

    仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 新钢股份(SH600782) - 滚动市盈率PE:3.87 - 滚动市净率PB:1.29 - 滚动年化股息收益率:1.31% - 钢铁 ...

  2. Flask学习笔记(2)--最简单的小应用

    0x01 第一个小程序 PyCharm新建一个flask项目,第一个小程序,我们来看一下 #引入flask类 from flask import Flask #将Flask对象实例化 app = Fl ...

  3. 如何建立nfs网络文件系统

    建立网络文件系统的前提:windows与linux虚拟机及开发板三者之间能够互相ping 通.  三者互ping通IP设置举例: 1. 首先,关闭windows的防火墙,然后通过:ufw  disab ...

  4. python str byte 转换

    # bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, ...

  5. 转载:VOC2007数据集制作

    转载自:https://blog.csdn.net/gaohuazhao/article/details/60871886 另外,可参考:https://blog.csdn.net/dcxhun3/a ...

  6. 怎么才能使服务器Nginx(或者Apache)支持字体文件

    为了在前端正确地显示字体,浏览器必须使用正确的http header来接受字体文件.如果服务器没有设置要求的头信息,那么有些浏览器就会在控制台报错或者直接不能显示. 可能你的服务器已经配置好了,你无须 ...

  7. [LeetCode] Flip Game II 翻转游戏之二

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  8. 腾讯地图打开地图选取位置 withMap

    https://lbs.qq.com/tool/component-picker.html withMap import React, { Component } from "react&q ...

  9. js 判断当前操作系统是ios还是android还是电脑端

    js判断客户端是否是IOS或者是Android //如果返回true 则说明是Android function is_weixin() { var ua = window.navigator.user ...

  10. 下载JDK开发工具包

    实例说明 开发java程序必须有Java开发环境,即jdk开发工具包,这个工具包包含了编译.运行.调试等关键的命令.运行Eclipse.NetBeans等开发工具也需要有jdk或jre的支持. 关键技 ...