从一个向量类中理解Python 中的特殊方法(__init__、__getitem__、__len__、__repr__、__str__)

news2024/9/19 9:47:30

文章目录

  • 前言
  • 一、init、getitem、len、repr、str解释
  • 二、向量案例
    • 1.实现属于我们自己的向量
    • 2.导入向量模块


前言

特殊方法是一种具有特殊命名约定的方法,用来定义类的行为与功能。当满足特定条件时,这些方法会被自动调用,从而实现一些内置的功能和操作


一、init、getitem、len、repr、str解释

__init__(self,……):当创建类的时候会自动调用,用于初始化类对象的属性和方法。
__getitem__(self, index):实现该类可以像字典等容器一样,使用索引或者键值进行访问,例如通过object[index]或者object[key]的方式获取对象的值。
__len__(self):返回对象的长度或者大小,支持len()方法,例如len(object)将调用类中的__len__方法。
__repr__(self):即创建该类的对象后,打印该对象时用于支持内置的 repr() 函数和交互式环境中的打印输出。简言之输出实例对象时,其内容由__repr__的返回值决定。
__str__(self):和repr类似,但是类中同时重写了__str__和__repr__后,打印实例对象的时候,python底层会优先执行实例对象.__str__()。

二、向量案例

1.实现属于我们自己的向量

# 实现属于我们自己的向量
class Vector:
    # 初始化变量
    def __init__(self, lst):
        self.values = lst
    # 实现该类可以像字典等对象那样可以直接通过索引或者键值进行访问
    def __getitem__(self, index):
        return self.values[index]
    # 向量元素长度,即有多少个元素
    def __len__(self):
        return len(self.values)
    # 方便于打印类或者输出对象时显示出传入的向量值
    def __repr__(self):
        return "Vector({})".format(self.values)
    def __str__(self):
        # 构建对象的字符串表示形式
        # 类似于将[1,2,3]  --->  (1,2,3)
        return "({})".format(", ".join(str(e) for e in self.values))

一些代码解释:

return "({})".format(", ".join(str(e) for e in self.values))

下面是每个部分的作用:

str(e) for e in self.values:这是一个生成器表达式,它将self.values中的每个元素 e 转换为字符串,使用str()函数进行转换。
", ".join(...):这将前一步生成的所有字符串连接成单个字符串,使用, 作为元素之间的分隔符。
"({})".format(...):这使用str.format()方法将拼接后的字符串插入到圆括号{}的占位符中。然后返回生成的字符串。
总体而言,这行代码构造了一个将对象的值用括号括起来、用逗号分隔的字符串表示形式。例如,如果self.values包含值 [1, 2, 3],那么返回的字符串将是 “(1, 2, 3)”。

2.导入向量模块

from playLA.Vector import Vector

if __name__ == "__main__":
    # 定义Vector
    vec = Vector([5, 2])
    # print打印出的是调用vec.__str__([5, 2])方法
    print(vec)
    # 调用vec.__len__([5, 2])方法
    print(len(vec))
    # 调用vec.__getitem__(index)方法
    print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))

打印结果
在这里插入图片描述
对比__repr__和__str__方法
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Splunk Enterprise for Mac:卓越的数据分析与管理工具

在当今的数字化时代,数据已经成为企业成功的核心驱动力。然而,如何有效地管理和分析这些数据,却常常让企业感到困惑。Splunk Enterprise for Mac 是一款领先的数据分析和管理工具,可以帮助你解决这一难题。 Splunk Enterprise fo…

Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

Nginx,负载均衡,Http反向代理服务器,支持大部分协议,如TCP、UDP、SMTP、HTTPS 环境搭建 Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中&…

适用于Linux的Windows子系统(在VScode中开发Linux项目)

目录 前言 一、VScode扩展安装 二、挂载项目 1.连接 2.挂载(挂载之后项目终端就是Linux了) 3.愉快的搬砖开始了 4.前端如何通过内网 IP 本地访问到 Ubuntu 上? 总结 前言 系列分为三章(从安装到项目使用)&…

云端AI:释放企业创新力,打造智慧企业

文章目录 1. 云端AI的基本概念1.1 云计算1.2 人工智能1.3 云端AI 2. 云端AI的重要性2.1 成本效益2.2 弹性扩展2.3 无缝整合2.4 实时更新 3. 云端AI的应用领域3.1 智能客服3.2 预测分析3.3 自动化生产 4. 云端AI的未来趋势4.1 边缘计算与云端AI的融合4.2 可解释性AI4.3 隐私和安…

ORACLE的分区(一)

目录 一、分区概念 二、表分区的优点 三、分区策略 一、分区概念 随着时间的发展,一个表的数据会越来越多,当数据量增大的时候我们一般采取建立索引优化索引的方式提高查询速度,但是数据量再次增大即使是索引也无法提高速度,这时…

从金蝶云星空到聚水潭通过接口配置打通数据

从金蝶云星空到聚水潭通过接口配置打通数据 源系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业打造面…

代码随想录Day_59打卡

①、下一个更大元素Ⅱ 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数&am…

REST风格【SpringBoot】

1.REST简介 行为动作 通常模块名使用复数,也就是加s 2.RESTful入门 Controller public class UserController {RequestMapping(value "/users", method RequestMethod.POST)public String save() {System.out.println("user save");return &…

pcie 总结

用户空间pci 常用命令 lspci 查看所有pci 设备 lspci -t 树形查看所有设备 lspci -s 00:1f.6 -vvv 查看某个设备所有信息 lspci -s 00:1f.6 -vvv -xxx 增加16进制看看 sudo cat /proc/iomen | grep PCI 查看所有地址映射 如何确定pcie io空间 内存空间大小 (1)读取出基地址…

视频监控/安防监控/AI视频分析/边缘计算/TSINGSEE青犀AI算法智慧仓储解决方案

随着全球经济与科学技术的双重推动,我国的仓储管理已经进入了高速发展时期,物流仓储也由简单的储藏仓库向智能化仓储转变。TSINGSEE青犀AI智慧仓储解决方案是利用先进的信息技术和物联网技术来提高仓储管理效率、降低成本的一种仓储管理模式。 方案功能 …

如何使用PyTorch训练LLM

推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么,包括 LangChain 解决的问题&#xf…

Facebook营销攻略:教你集中管理Facebook Business专页及广告

Facebook 在社交媒体间是无人不识的「霸主」,占据着主导地位,2020年 Facebook 创造了 859亿美元的收入,当中有大约600亿美元来自 Facebook 的应用程序,而 Facebook App 已被下载超过50亿次。作为全球最大型的社交媒体公司之一&…

2023年7月京东饮料行业数据分析(京东运营数据分析)

饮料消费已成为当下快消品行业里的主力军,随着社会群体喜好的改变、消费群体的不断扩大,可选择的饮料种类越来越多,我国饮料市场的体量也较为庞大。根据鲸参谋电商数据分析平台的数据显示,今年7月份,京东平台饮料的销量…

如何获得一个Oracle 23c免费开发者版

获取23c开发者版 简单介绍可参考这里。 获取数据库可以参考这篇文章Introducing Oracle Database 23c Free – Developer Release或这里。 Docker Image 这是最快的方法。在OCI上创建一个计算实例,然后就可以拉取image使用了。 docker的安装和配置不赘述了。 …

《DevOps实践指南》- 读书笔记(一)

DevOps实践指南 Part 1 DevOps 介绍精益运动敏捷宣言 1. 敏捷、持续交付和三步法1.1 制造业价值流1.2 技术价值流1.2.1 聚焦于部署前置时间1.2.2 关注返工指标——%C/A 1.3 三步工作法:DevOps 的基础原则 2. 第一步:流动原则2.1 使工作可见2.2 限制制品数…

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目, 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前,建议你前往 教程概览 页面,并至少完成一个 介绍教程, 从而…

分布式秒杀方案--java

前提:先把商品详情和秒杀商品缓存redis中,减少对数据库的访问(可使用定时任务) 秒杀商品无非就是那几步(前面还可能会有一些判断,如用户是否登录,一人一单,秒杀时间验证等&#xff0…

springboot web 增加不存在的url返回200状态码 vue 打包设置

spring boot项目增加 html web页面访问 1. 首先 application.properties 文件中增加配置,指定静态资源目录(包括html的存放) spring.resources.static-locationsclasspath:/webapp/,classpath:/webapp/static/ 2. 项目目录 3. 如果有实现 …

适用于基于晶圆键合的3D集成应用的高效单晶圆清洗

引言 不同的微电子工艺需要非常干净的表面以防止颗粒污染。其中,晶圆直接键合对颗粒清洁度的要求非常严格。直接晶圆键合包括通过简单地将两种材料的光滑且干净的表面接触来将两种材料连接在一起(图1)。在室温和压力下,两种材料表…

休闲零食新的机会在哪里?

世间唯一不变的,或许只有变化本身。 来自同花顺iFinD的数据显示,上半年A股21家休闲食品概念股累计实现营收350.45亿元,净利润26.46亿元。其中,良品铺子的营业收入排在首位,为39.87亿元,桃李面包的净利润排…