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

相关推荐
阿坡RPA10 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户277844910499310 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心10 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI12 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
JavaEdge在掘金12 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55513 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
凯子坚持 c13 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
老歌老听老掉牙13 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101513 小时前
Python入门(7):模块
python
无名之逆13 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust