Python之__slots__ &运算符重载反向运算
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__ &运算符重载反向运算的更多相关文章
- Python 中的运算符重载
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...
- Python中类的运算符重载
这篇文章仅仅是总结性质的,待以后有时间的时候会针对比较难理解的部分补充一些例子. 构造和析构 __init__ __del__ 函数调用 __call__ 打印操作 __str__ __repr__ ...
- Python全栈工程师(异常(高级)、运算符重载)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- python基础之01数据类型-变量-运算浅解
python的数据类型 1 数字 数字分为整型(int),长整型(long),浮点型(float),复数(complex) 整型较为常用的功能: >>> a=-4 >> ...
- python运算符重载(二)
一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...
- python运算符重载
python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...
- python学习笔记(五)——静态方法、类方法、运算符重载
我们都知道类名是不能够直接调用类方法的.在C++中,把成员方法声明为 static 静态方法后可以通过类名调用.同样的在python中也可以通过定义静态方法的方式让类名直接调用. 静态方法 使用 @s ...
- [b0018] python 归纳 (四)_运算符重载
# -*- coding: UTF-8 -*- """ 测试运算符重载 加法 总结: python 运算符表达式其实都是调用 类中方法 __xxx__ + <--- ...
随机推荐
- Linux iptables原理和使用
1.原理 iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵 ...
- 简单的 FastDFS + Nginx 应用实例
版权声明:本文为GitChat作者的原创文章,未经 GitChat 同意不得转载. https://blog.csdn.net/GitChat/article/details/79479148 wx_ ...
- Linux 特殊字符_008
Linux 特殊字符用于用户命令行bash环境处理数据,达到一种命令简化使用的功能 通配符 符号 功能 备注 * 代表所有(0到多个)字符 ? 代表任意一个字符 [ ] 匹配[ ]任意一个字符,写法[ ...
- Jquery实现轮播公告
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- selenium+chromedriver刷点击量
#coding=utf-8 import re import time import json import requests from selenium import webdriver from ...
- docker 应用-2(Dockerfile 编写以及镜像保存提交)
我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤 ...
- nvm的安装
安装前可先卸载原来的node, npm, 安装成功后,可用nvm装node 一.用nvm-noinstall.zip安装 1.nvm-windows 下载 https://github.com/cor ...
- java学习(三)--- 修饰符
访问修饰符: default.public.private.protected 非访问修饰符 static: 静态方法,静态变量 final: final变量: final变量能够显示的初始化并且只能 ...
- Linux 安装mysql mariadb配置
CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置 1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server ...
- ZOJ 4063 - Tournament - [递归][2018 ACM-ICPC Asia Qingdao Regional Problem F]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4063 Input Output Sample Input 2 3 ...