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__ 方法,可以使自定义类对象与内置容器类型的行为一致,使得代码更加直观和易于使用。

相关推荐
墨利昂4 小时前
神经网络常用激活函数公式
人工智能·深度学习·神经网络
2501_930799244 小时前
访答知识库,企业知识库,访答浏览器,Al编辑器,RAG,Pdf转word。个人知识库,访答RAG,云知识库,私有知识库……
人工智能
机器之心4 小时前
OpenAI官宣自研造芯,联手博通开发10吉瓦规模的AI加速器
人工智能·openai
机器之心4 小时前
100美元、8000行代码手搓ChatGPT,Karpathy最新开源项目爆火,一夜近5k star
人工智能·openai
RTC老炮4 小时前
webrtc弱网-BitrateEstimator类源码分析与算法原理
网络·人工智能·算法·机器学习·webrtc
星期天要睡觉4 小时前
计算机视觉(opencv)——基于 MediaPipe 的手势识别系统
人工智能·opencv·计算机视觉
三年呀4 小时前
指纹技术深度剖析:从原理到实践的全方位探索
图像处理·人工智能·计算机视觉·指纹识别·生物识别技术·安全算法
学习的周周啊5 小时前
一人AI自动化开发体系(Cursor 驱动):从需求到上线的全流程闭环与实战清单
运维·人工智能·自动化·ai编程·全栈·devops·cursor
后端小肥肠5 小时前
明星漫画总画不像?用 Coze +即梦 4 工作流,素描风漫画3分钟搞定,小白也能上手
人工智能·aigc·coze
flay6 小时前
5个Claude实战项目从0到1:自动化、客服机器人、代码审查
人工智能