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

相关推荐
昨日之日200614 小时前
Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
人工智能·音视频
一个天蝎座 白勺 程序猿16 小时前
Python爬虫(47)Python异步爬虫与K8S弹性伸缩:构建百万级并发数据采集引擎
爬虫·python·kubernetes
XiaoMu_00117 小时前
基于Django+Vue3+YOLO的智能气象检测系统
python·yolo·django
SEO_juper17 小时前
大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
人工智能·语言模型·自然语言处理·chatgpt·llm·seo·数字营销
攻城狮7号18 小时前
腾讯混元翻译模型Hunyuan-MT-7B开源,先前拿了30个冠军
人工智能·hunyuan-mt-7b·腾讯混元翻译模型·30个冠军
zezexihaha18 小时前
从“帮写文案”到“管生活”:个人AI工具的边界在哪?
人工智能
算家云18 小时前
nano banana官方最强Prompt模板来了!六大场景模板详解
人工智能·谷歌·ai大模型·算家云·ai生图·租算力,到算家云·nano banana 提示词
暴躁的大熊18 小时前
AI助力决策:告别生活与工作中的纠结,明析抉择引领明智选择
人工智能
Gyoku Mint18 小时前
提示词工程(Prompt Engineering)的崛起——为什么“会写Prompt”成了新技能?
人工智能·pytorch·深度学习·神经网络·语言模型·自然语言处理·nlp
honder试试18 小时前
焊接自动化测试平台图像处理分析-模型训练推理
开发语言·python