当前位置: 首页 > news >正文

pytorch的继承方法

在 Python 中,继承方法的过程分为两部分:通过类定义时的继承(在 `class` 的括号中指定父类),以及在子类中使用 `super()` 关键字调用父类的方法。两者的用途和作用有所不同,它们之间既有联系,也有区别。

 1. 在 `class` 的括号中继承父类

作用

- **定义继承关系**: 在 `class` 的括号中指定父类,意味着这个类继承了父类的所有属性和方法。这样子类就拥有了父类的所有功能。
  

  ```pythonclass Parent:def method_a(self):print("Method A from Parent")class Child(Parent):  # 这里指定了继承关系passc = Child()c.method_a()  # 输出: "Method A from Parent"```

 联系

- **属性与方法的继承**: 子类会自动继承父类的所有属性和方法,并且可以直接使用它们。通过这种方式,子类可以重用父类的功能而不需要重新实现。

特点

- **静态的继承**: 这个继承关系是在类定义时确定的,并且是固定的。它不涉及方法调用,而是为子类提供了父类的所有功能。

2. 在子类中使用 `super()` 调用父类的方法

 作用

- **调用父类的方法**: `super()` 允许你显式调用父类的方法,通常是在子类中重写了父类的方法时使用,以便在子类中仍然能够调用父类的实现。

  ```pythonclass Parent:def method_a(self):print("Method A from Parent")class Child(Parent):def method_a(self):print("Method A from Child")super().method_a()  # 调用父类的方法c = Child()c.method_a()  # 输出:# "Method A from Child"# "Method A from Parent"```

 联系

- **方法调用的灵活性**: `super()` 提供了一种方式,可以在子类中调用父类的方法。这在子类需要扩展父类功能(而不是完全替换父类功能)时非常有用。

 特点

- **动态的继承**: `super()` 是在运行时调用的,允许子类选择性地使用或扩展父类的方法。它适用于多重继承的情况,能够正确地处理复杂的继承链。

 区别与联系

1. **使用场景**:
   - **类定义时的继承**: 在 `class` 的括号中指定父类,主要是用于声明子类继承哪个父类,并获得父类的所有属性和方法。这是一个静态、全局的继承关系,确定了类的层次结构。
   - **`super()`**: 通常用于在子类中重写父类的方法时,调用父类的实现。它提供了子类和父类之间更灵活的互动方式,尤其在扩展父类方法时非常有用。

2. **执行时间**:
   - **类定义时的继承**: 发生在类定义时,构建了类的继承关系。
   - **`super()`**: 发生在运行时,当你在子类中调用 `super()` 时,它会动态查找并执行父类的方法。

3. **多重继承**:
   - **类定义时的继承**: 在多重继承中,子类将继承所有指定的父类,但需要注意方法解析顺序(MRO,Method Resolution Order)。
   - **`super()`**: 可以处理多重继承的情况,并按照 MRO 调用正确的父类方法。这在多重继承中尤为重要,可以避免重复调用同一个祖先类的方法。

总结

- **在 `class` 括号中继承**: 这是声明性的,表示子类继承了哪些父类,它是静态地定义类的层次结构。
- **`super()`**: 是动态调用的,用于在子类中显式调用父类的方法,特别是在重写方法时,用来扩展而不是完全取代父类的方法。

两者紧密相关,定义时的继承提供了结构,`super()` 则提供了灵活性,使得子类可以更好地控制继承的行为。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 探索数字沙龙——文本描述生成数字人3D发型的专业工具
  • 数据结构与算法再探(二)高精度计算
  • ActiveMQ指南
  • SpringBoot项目目录介绍(SpringBoot学2)
  • pycharm中opencv-python和opencv-contrib安装
  • 【XR】SDK的接口规划与设计
  • K8S对接Ceph分布式存储
  • apache服务器的配置(服务名httpd,端口80 , 443)
  • Ubuntu安装交叉编译工具链(gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu)
  • 中文乱码解决方案
  • R语言论文插图模板第8期—特征渲染的散点图
  • YoloV8改进策略:主干网络改进|CAS-ViT在YoloV8中的创新应用与显著性能提升
  • 独立开发者系列(45)——PHP的时间处理详解
  • (160)时序收敛--->(10)时序收敛十
  • 单链表——相交链表
  • 分享一款快速APP功能测试工具
  • [译]Python中的类属性与实例属性的区别
  • 【RocksDB】TransactionDB源码分析
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【技术性】Search知识
  • 2017 年终总结 —— 在路上
  • centos安装java运行环境jdk+tomcat
  • Github访问慢解决办法
  • magento 货币换算
  • Phpstorm怎样批量删除空行?
  • Python socket服务器端、客户端传送信息
  • vuex 学习笔记 01
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从零搭建Koa2 Server
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 看域名解析域名安全对SEO的影响
  • 十年未变!安全,谁之责?(下)
  • 推荐一个React的管理后台框架
  • Linux权限管理(week1_day5)--技术流ken
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 数论-逆元
  • #android不同版本废弃api,新api。
  • #Ubuntu(修改root信息)
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (26)4.7 字符函数和字符串函数
  • (C语言)球球大作战
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (poj1.2.1)1970(筛选法模拟)
  • (笔试题)分解质因式
  • (七)Java对象在Hibernate持久化层的状态
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三) diretfbrc详解
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (一)Dubbo快速入门、介绍、使用
  • (转载)(官方)UE4--图像编程----着色器开发