pytorch的继承方法

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

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

作用

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

  ```python
  class Parent:
      def method_a(self):
          print("Method A from Parent")

  class Child(Parent):  # 这里指定了继承关系
      pass

  c = Child()
  c.method_a()  # 输出: "Method A from Parent"
  ```

 联系

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

特点

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

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

 作用

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

  ```python
  class 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()` 则提供了灵活性,使得子类可以更好地控制继承的行为。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值