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

相关推荐
果冻人工智能13 分钟前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工15 分钟前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
进击的六角龙15 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂15 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
石小石Orz17 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
湫ccc23 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
孤独且没人爱的纸鹤26 分钟前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭28 分钟前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~29 分钟前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
lzhlizihang32 分钟前
python如何使用spark操作hive
hive·python·spark