十念 发表于 2024-9-1 18:00:02

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()` 则提供了机动性,使得子类可以更好地控制继承的举动。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: pytorch的继承方法