首页 > Python资料 博客日记
python使用魔法函数__getitem__实现字典和列表式访问自定义类型
2024-11-01 11:00:03Python资料围观58次
文章python使用魔法函数__getitem__实现字典和列表式访问自定义类型分享给大家,欢迎收藏Python资料网,专注分享技术知识
起因
想起C++可以实现运算符重载,以实现以数组的方式([]
)访问我们的类.
我想要实现一个类,可以同时用类似于字典和
就想到python能不能实现这个效果,而且显然是可以的,不然numpy
是怎么实现属于自己的数组的?
# 期望实现效果
class myclass:
pass
c = myclass()
# 像这样使用[]访问我们自己的类
print(c[0])
经过
这样进行测试
class C(object):
def __getitem__(self, val):
print(val)
c = C()
print(c[4])
print(c[0,2])
print(c[0:2])
发现几种比较常用的访问方式:
int
slice
tuple
也就是我们在用[]
进行访问的时候实际上对应地传入的是这几种类型.
那么我们只需要在__getitem__
里对类型进行判断进行不同的处理即可:
class C(object):
def __getitem__(self, val):
if isinstance(val,slice):
pass
elif isinstance(val,int):
pass
elif isinstance(val,tuple):
pass
elif isinstance(val,str):
pass
那么前三种分支就是以列表式索引访问,最后一种则是用字典式访问.
自己定义好类型的数据结构就可以愉快地进行访问了.
numpy
支持的索引方式
来自于:\numpy\__init__.pyi
:
@overload
def __getitem__(self, key: (
NDArray[integer[Any]]
| NDArray[bool_]
| tuple[NDArray[integer[Any]] | NDArray[bool_], ...]
)) -> ndarray[Any, _DType_co]: ...
@overload
def __getitem__(self, key: SupportsIndex | tuple[SupportsIndex, ...]) -> Any: ...
@overload
def __getitem__(self, key: (
None
| slice
| ellipsis
| SupportsIndex
| _ArrayLikeInt_co
| tuple[None | slice | ellipsis | _ArrayLikeInt_co | SupportsIndex, ...]
)) -> ndarray[Any, _DType_co]: ...
@overload
def __getitem__(self: NDArray[void], key: str) -> NDArray[Any]: ...
@overload
def __getitem__(self: NDArray[void], key: list[str]) -> ndarray[_ShapeType, _dtype[void]]: ...
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程