python 学习汇总49:对象重载魔法 1(进阶学习- tcy)

2024-03-20 09:58

本文主要是介绍python 学习汇总49:对象重载魔法 1(进阶学习- tcy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录:

1.   对象重载魔法基本介绍

2.  对象重载魔法实例   见博文:对象重载魔法 2

1.__str__,__repr__,__abs__ ,__len__, __reversed__重载2.运算符重载二元运算符重载方法格式: 2.1.算术运算重载2.2.反向算术运算重载2.3.复合赋值算术运算重载4.迭代器(高级):4.1.迭代器重载4.2.可迭代对象重载1.__iter__迭代对象2.支持索引切片5.上下文管理器重载6.__call__重载7.索引和切片运算符的重载[ ]:实例1__repr__,__neg__,__contains__,__getitem__ ,__setitem__ ,__delitem__重载IN 对象检测索引切片    实例2 class 实现list 功能:__len__,__getitem__,__setitem__,__delitem__,__iter__,__reversed__重载8.特性属性重载:__getattr__(self, attr)@property实例8.1.__getattr__动态返回一个属性:利用完全动态__getattr__写出一个链式调用:实例8.2.此示例示意特性属性的用法实例8.3.此示例示意特性属性的用法'9.其他魔法
1.对象创建与销毁:用来定义类
__new__(cls[,*args.**kwargs])  创建新实例时调用的类方法# 通常用在定义元类或继承自不可变类型之一(整形,字符串,元祖等)# 这个函数会在类初始化函数__init__()之前调用__init__(self[,*args,**kwargs])  初始化新实例时调用
__del__(self)                           销毁实例时调用 # 应用在关键资源管理
2.对象字符串
__format__(self,format_spec)     创建格式化后的表示
__repr__(self)                             创建对象的字符串表示
__str__(self)                               创建简单的字符串表示
3.对象测试
__bool__(self)                           真值测试返回false,true
__hash__(self)                          计算整数的散列索引  可变对象不应定义此方法
4.对象比较与排序
__lt__(self,other)            结果self<other
__le__(self,other)           结果self<=other
__gt__(self,other)          结果self>other
__ge__(self,other)         结果self>=other
__eq__(self,other)         结果self=other
__ne__(self,other)         结果self!=other
5.类型检查 用在抽象基类和接口
__instancecheck__(cls,object)       结果:isinstance(object,cls)
__subclasscheck__(cls,sub)          结果:issubclass(sub,cls)
6.属性访问
 __getattribute__(self,name)       返回属性self.name;
调用__getattr__前必定会调用 __getattribute__;要避免"无限递归";    容易出错,应尽量少用。 # 类中所有属性的点号运算都会尝试该方法
__getattr__(self,name)              常规查找未找到属性返回slef.name,无法计算属性引发AttributeError;要避免"无限递归"# 只有类中没有定义的属性点号运算才会尝试该方法
__setattr__(self,name,value)     设置属性self.name=value ;要避免"无限递归"
    # 类中所有属性的赋值语句都会尝试该方法,self.attr=val会变成self.__setattr__('attr',val)
__delattr__(self,name)              删除属性self.name;要避免"无限递归"
7.属性包装与描述符  类似于上面
__get__(self,instance,cls)        返回一个属性
__set__(self,instance,value)    设置属性
__delete__(self,instance)         删除属性 #析构函数__del__是完全不同的
8.序列于映射方法:索引与分片
__len__(self) 返回self的长度 # len([1,2]) [1,2].__len__()
__getitem__(self,key) 返回self[key] #a=[1,2]; x=a[1] x=a.__getitem__(1)
__setitem__(self,key,value) 设置self[key]=value# a[1]=7 a.__setitem__(1,7)
__delitem__(self,key) 删除self[key] # del a[2] a.__delitem__(2)
              # 切片操作
x=a[1:5]                 # x=a.__getitem__(slice(1,5,None))
a[1:3]=[10,11,12]  # a.__setitem__(slice(1,3,None),[10,11,12])
del a[1:3]             # a.__delitem__(slice(1,4,None))
9.迭代
obj.__iter__() 返回一个迭代器对象
iter.__next__() 返回下一个对象
# 在所有的迭代环境中,会先尝试__iter__方法,然后在尝试__getitem__方法,
# 注意迭代器根本没有重载索引表达式,如需通过while来根据下标迭代要定义__getitem__方法
10.数学操作:
1) 数学运算操作
__add__(self,other) 返回self+other
__iadd__, __radd__,__sub__, __isub__, __rsub__
__mul__, __imul__: 乘法
__neg__, __pos__: 表示-obj, +obj
__abs__
__floordiv__, __ifloordiv__, __truediv__, __itruediv__
__mod__, __imod__, __imod__
__pow__, __ipow__# a += b尝试增强加法__iadd__,然后尝试普通加法__add__
# x = b + obj:如果b不是类实例时,会调用右侧加法__radd__
# 当我们把两个实例相加的时候,Python运行__add__,它反过来通过简化左边的运算数来触发__radd__。2)比较大小
__lt__
__le__
__gt__
__ge__
__eq__: #!=和==都会尝试该方法,需要确保两个运算符都正确地作用。# 实例:
class X:
def __init__(self, value):
self.data = value
def __eq__(self, value):
return self.data == valuex = X(4)
print(x ==5)# False
print(x != 5)# True3)对象运算操作
__concat__:比如序列a,b的加法a+b
__iconcat__4)位运算符
__and__, __iand__
__or__, __ior__, __xor__, __ixor__
__inv__, __invert__ : ~obj
__lshift__, __ilshift__, __rshift__, __irshift__a &=b:会先尝试__iand__,然后尝试__add__5)布尔测试
__bool__
__len__
# 布尔测试会先尝试一个特定__bool__方法,然后在尝试__len__方法。6).成员测试
__contains__(self,obj) 如果obj在self中返回True # 5 in a a.__contains__(5)
# in成员测试会先尝试__contains__方法,然后是__iter__方法,最后是__getitem__方法
11.可调用接口
__call__(self,*args,**kwargs) 模拟函数
# x(arg1,arg2,…) 等同于调用于调用x.__call__(self,arg1,arg2,…)class distanceFrom(object):
def __init__(self,origin):
self.origin=origin
def __call__(self,x):
return abs(x-self.origin)nums=[1,37,42,101,13,9,-20]
nums.sort(key=distanceFrom(10)) #按照10的距离排序12.上下文管理协议
__enter__(self) 进入新的上下文
__exit__(self,type,value,tb) 离开上下文 ,返回异常类型,值,跟踪信息with context [as var]: #var方法的返回值
statements13.对象检查
__ dir__(self) 检查对象返回名称列表14.整数值
__index__
# 在bin(X), hex(X), oct(X), O[X], O[X:]等需传入一个数字,索引,分片值时传入一个对象,
# 那么该对象的__index__会被调用。

 

 

 

这篇关于python 学习汇总49:对象重载魔法 1(进阶学习- tcy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829096

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参