pytorch基础【2】__getitem__,__len__

文章目录

__getitem__

在 Python 中,__getitem__ 是一个特殊方法,用于定义对象的索引访问行为。它使得对象可以使用方括号 [] 进行索引操作,类似于列表、元组和字典等内置容器类型。

__getitem__ 方法的作用

  1. 索引访问: 使对象能够通过索引或键来访问其内部数据。
  2. 自定义索引逻辑: 允许在类中定义自定义的索引访问逻辑,灵活处理复杂的数据结构。

代码示例

以下是一个简单的示例,展示了如何在自定义类中实现 __getitem__ 方法:

python 复制代码
class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data[index]

# 创建类的实例
my_list = MyList([1, 2, 3, 4, 5])

# 使用索引访问数据
print(my_list[0])  # 输出: 1
print(my_list[2])  # 输出: 3

详细解释

  1. 类定义:

    python 复制代码
    class MyList:
  2. 初始化方法:

    python 复制代码
    def __init__(self, data):
        self.data = data

    __init__ 方法接受一个参数 data,并将其存储在实例的 self.data 属性中。

  3. __getitem__ 方法:

    python 复制代码
    def __getitem__(self, index):
        return self.data[index]

    __getitem__ 方法接受一个参数 index,并返回 self.data 中对应索引位置的值。这样,当你使用 my_list[index] 时,会调用这个方法。

应用示例

以下是一个更复杂的示例,展示了如何使用 __getitem__ 方法来实现一个自定义的字典类,该类可以使用键访问值:

python 复制代码
class MyDict:
    def __init__(self):
        self.data = {}

    def __getitem__(self, key):
        return self.data[key]

    def __setitem__(self, key, value):
        self.data[key] = value

# 创建类的实例
my_dict = MyDict()

# 使用键设置值
my_dict["name"] = "Alice"
my_dict["age"] = 30

# 使用键访问值
print(my_dict["name"])  # 输出: Alice
print(my_dict["age"])   # 输出: 30

详细解释

  1. 类定义:

    python 复制代码
    class MyDict:
  2. 初始化方法:

    python 复制代码
    def __init__(self):
        self.data = {}

    __init__ 方法初始化一个空字典 self.data

  3. __getitem__ 方法:

    python 复制代码
    def __getitem__(self, key):
        return self.data[key]

    __getitem__ 方法接受一个参数 key,并返回 self.data 中对应键的值。

  4. __setitem__ 方法:

    python 复制代码
    def __setitem__(self, key, value):
        self.data[key] = value

    __setitem__ 方法允许通过键设置值。

注意事项

  • 异常处理 : 当访问的索引或键不存在时,可以在 __getitem__ 方法中添加异常处理逻辑,例如:

    python 复制代码
    def __getitem__(self, key):
        if key in self.data:
            return self.data[key]
        else:
            raise KeyError(f"Key {key} not found.")
  • 其他相关方法 : 实现 __setitem__(用于设置值)、__delitem__(用于删除值)和 __len__(用于获取长度)等方法,来使自定义类的行为更像内置容器类型。

通过实现 __getitem__ 方法,你可以自定义对象的索引访问逻辑,使得对象的使用更加直观和灵活。

在 Python 中,__len__ 是一个特殊方法,用于定义对象的长度。调用 len() 函数时,它会自动调用对象的 __len__ 方法。这个方法通常用于容器类(如列表、字典、集合等),以返回容器中元素的数量。

len

__len__ 方法的作用

  1. 返回对象的长度 : __len__ 方法应该返回一个整数,表示对象中包含的元素数量。
  2. len() 函数配合使用 : 当你对一个对象调用 len() 函数时,Python 会自动调用该对象的 __len__ 方法。

代码示例

以下是一个简单的示例,展示了如何在自定义类中实现 __len__ 方法:

python 复制代码
class MyList:
    def __init__(self, data):
        self.data = data

    def __len__(self):
        return len(self.data)

# 创建类的实例
my_list = MyList([1, 2, 3, 4, 5])

# 使用 len() 函数获取长度
print(len(my_list))  # 输出: 5

详细解释

  1. 类定义:

    python 复制代码
    class MyList:
  2. 初始化方法:

    python 复制代码
    def __init__(self, data):
        self.data = data

    __init__ 方法接受一个参数 data,并将其存储在实例的 self.data 属性中。

  3. __len__ 方法:

    python 复制代码
    def __len__(self):
        return len(self.data)

    __len__ 方法返回 self.data 的长度。使用 len(my_list) 时,会调用这个方法并返回 self.data 的长度。

应用示例

以下是一个更复杂的示例,展示了如何使用 __len__ 方法来实现一个自定义的字典类,该类可以返回存储的键值对的数量:

python 复制代码
class MyDict:
    def __init__(self):
        self.data = {}

    def __getitem__(self, key):
        return self.data[key]

    def __setitem__(self, key, value):
        self.data[key] = value

    def __len__(self):
        return len(self.data)

# 创建类的实例
my_dict = MyDict()

# 使用键设置值
my_dict["name"] = "Alice"
my_dict["age"] = 30

# 使用 len() 函数获取长度
print(len(my_dict))  # 输出: 2

详细解释

  1. 类定义:

    python 复制代码
    class MyDict:
  2. 初始化方法:

    python 复制代码
    def __init__(self):
        self.data = {}

    __init__ 方法初始化一个空字典 self.data

  3. __getitem__ 方法:

    python 复制代码
    def __getitem__(self, key):
        return self.data[key]

    __getitem__ 方法接受一个参数 key,并返回 self.data 中对应键的值。

  4. __setitem__ 方法:

    python 复制代码
    def __setitem__(self, key, value):
        self.data[key] = value

    __setitem__ 方法允许通过键设置值。

  5. __len__ 方法:

    python 复制代码
    def __len__(self):
        return len(self.data)

    __len__ 方法返回 self.data 的长度,即字典中键值对的数量。

注意事项

  • 返回值类型 : __len__ 方法必须返回一个整数值。
  • 合理性 : __len__ 方法应当合理地反映对象的大小或容量。例如,对于一个容器类,__len__ 方法应返回其中包含的元素数量。
  • 错误处理 : 如果对象不具备长度概念,通常不应实现 __len__ 方法,以避免误导使用者。

通过实现 __len__ 方法,可以使自定义类对象与内置容器类型的行为一致,使得代码更加直观和易于使用。

相关推荐
wshzd14 分钟前
LLM之Agent(六十八)|PI(七)构建测试与开发流程
人工智能
H03111698516 分钟前
App竞品数据平台功能梳理:月狐数据、七麦数据、点点数据
人工智能
YOLO数据集集合21 分钟前
高铁轨道紧固件损坏检测数据集 | 高铁巡检 紧固件缺陷 轨道安全9093期
人工智能·目标检测·计算机视觉·目标跟踪·轨道·铁轨紧固件·铁轨
冬奇Lab22 分钟前
一天一个开源项目(第223篇):TeamAI-CLI —— 腾讯开源的团队级 AI Agent 中间层,让每个人的 AI 能力变成团队共享能力
人工智能·开源·资讯
ShineWinsu30 分钟前
对于Coze—AI:SDK的解析
人工智能·python·ai·sdk·项目·coze·字节跳动
代码方舟36 分钟前
零信任架构实战:基于天远名下企业A构建自动化B2B供应链准入网关
人工智能·ai·工具分享
IvorySQL1 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
右耳朵猫AI1 小时前
Python周刊2026W38 | 标准流编码修复、PEP 845/846 草案、解析器提速 10%、集合字典二次复杂度
python·ai·数据科学
俗人六哥AI企业获客盈利系统1 小时前
知识库才是AI落地的分水岭
人工智能·线性代数·矩阵·自动化
微软技术分享1 小时前
大模型网络结构:模型接口测试用例参考
python