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

文章目录

  • 前言
  • 一、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]))

打印结果
从一个向量类中理解Python 中的特殊方法(__init__、__getitem__、__len__、__repr__、__str__)_第1张图片
对比__repr__和__str__方法
从一个向量类中理解Python 中的特殊方法(__init__、__getitem__、__len__、__repr__、__str__)_第2张图片

你可能感兴趣的:(python学习,python,开发语言)