news 2026/3/10 4:46:35

Python中类的self与super超级类用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python中类的self与super超级类用法

1 问题

class BasicBlock(nn.Module):
expansion = 1

def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
base_width=64, dilation=1, norm_layer=None):
super(BasicBlock, self).__init__()
if norm_layer is None:
norm_layer = nn.BatchNorm2d
if groups != 1 or base_width != 64:
raise ValueError('BasicBlock only supports groups=1 and base_width=64')
if dilation > 1:
raise NotImplementedError("Dilation > 1 not supported in BasicBlock")
# Both self.conv1 and self.downsample layers downsample the input when stride != 1
self.conv1 = conv3x3(inplanes, planes, stride)
self.bn1 = norm_layer(planes)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(planes, planes)
self.bn2 = norm_layer(planes)
self.downsample = downsample
self.stride = stride self是什么含义?作用是? super(BasicBlock, self).__init__() 呢?

2 解答

### `self` 的含义和作用

#### 含义
在 Python 类的方法中,`self` 是一个约定俗成的参数名,它代表类的实例对象本身。当你创建一个类的实例并调用该类的方法时,Python 会自动将这个实例作为第一个参数传递给方法,而这个参数通常就命名为 `self`。

#### 作用
- **访问实例属性**:通过 `self` 可以在类的方法内部访问和修改实例的属性。例如,在 `BasicBlock` 类中,`self.conv1`、`self.bn1` 等都是实例属性,通过 `self` 可以对它们进行操作。
- **调用实例方法**:同样可以使用 `self` 来调用类的其他实例方法。虽然在 `BasicBlock` 类中没有明显体现,但如果有其他实例方法,就可以通过 `self` 来调用。

以下是一个简单的示例来说明 `self` 的作用:
```python
class MyClass:
def __init__(self, value):
# 通过 self 来设置实例属性
self.value = value

def print_value(self):
# 通过 self 来访问实例属性
print(self.value)

# 创建实例
obj = MyClass(10)
# 调用实例方法
obj.print_value()
```

### `super(BasicBlock, self).__init__()` 的含义和作用

#### 含义
在 Python 中,`super()` 是一个内置函数,用于调用父类(超类)的方法。`super(BasicBlock, self).__init__()` 是 Python 2.x 的语法,在 Python 3.x 中可以简化为 `super().__init__()`。它的作用是调用父类的 `__init__` 方法。

#### 作用
- **继承父类的初始化逻辑**:在子类的 `__init__` 方法中调用父类的 `__init__` 方法,可以确保子类继承了父类的初始化逻辑。在 `BasicBlock` 类中,它继承自 `nn.Module`,通过调用 `super().__init__()`,`BasicBlock` 实例会执行 `nn.Module` 的初始化操作,从而具备 `nn.Module` 的基本功能,如管理子模块、参数等。

以下是一个简单的继承示例:
```python
class ParentClass:
def __init__(self):
print("Parent class initialized")

class ChildClass(ParentClass):
def __init__(self):
# 调用父类的 __init__ 方法
super().__init__()
print("Child class initialized")

# 创建子类实例
child_obj = ChildClass()
```
在这个示例中,当创建 `ChildClass` 的实例时,会先执行父类 `ParentClass` 的 `__init__` 方法,然后再执行子类 `ChildClass` 的 `__init__` 方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 20:55:00

31、集群架构全解析:类型、配置与最佳实践

集群架构全解析:类型、配置与最佳实践 1. 集群软件概述 集群软件能够创建单一系统映像,并将任务分配到所有节点上并发执行。任务通过消息传递库进行协调,结果也通过该库进行通信。常见的集群软件应用示例包括 Oracle Real Application Clusters (RAC) 和 IBM Sysplex Data…

作者头像 李华
网站建设 2026/3/6 4:20:43

AI Agent领域的痛点与创新解决方案

AI Agent领域的痛点与创新解决方案 目录 AI Agent领域的痛点与创新解决方案 一、核心痛点问题 1. 推理能力局限:"想不深、连不上" 2. 成本与效率悖论:"算不起、等不及" 3. 上下文管理困境:"记不住、理不清" 4. 可靠性危机:"说胡话、做傻…

作者头像 李华
网站建设 2026/3/2 17:59:06

44、网络安全之防火墙与病毒防护全解析

网络安全之防火墙与病毒防护全解析 1. 防火墙的控制方法 防火墙在企业网络中起着至关重要的作用,它能够对员工使用内部服务器以及外部人员访问公司服务器的方式进行严格控制。防火墙主要通过以下三种方法来控制网络流量: - 数据包过滤 :对每个进出的数据包进行检查,依…

作者头像 李华
网站建设 2026/3/5 20:54:46

50、未来信息技术趋势:关键技术解析与应用前景

未来信息技术趋势:关键技术解析与应用前景 1. 网络融合技术 网络融合技术将存储和语音等服务集成到 IP 网络中,有助于降低设置和支持成本。通过这种集成,组织能够利用现有的网络进行应用程序、存储和电话通话等操作。同时,不同的服务团队可以合并,从而减少人员和维护成本…

作者头像 李华
网站建设 2026/3/5 7:04:58

快速掌握yt-dlp-gui:Windows视频下载终极指南

快速掌握yt-dlp-gui:Windows视频下载终极指南 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 在数字内容爆炸的时代,高效获取网络视频资源已成为许多用户的迫切需求。yt-dlp-gui作…

作者头像 李华
网站建设 2026/3/9 2:47:22

Zotero-GPT插件API密钥配置终极指南:3步解决密钥错误问题

Zotero-GPT插件API密钥配置终极指南:3步解决密钥错误问题 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 当你兴奋地想要使用Zotero-GPT插件来智能处理文献时,却遭遇了"your secret…

作者头像 李华