当前位置:   article > 正文

深入了解 Python 中的 super() 函数_super()函数

super()函数

2c9afbc9fa5a7917aca9b55dd3dc4bce.png

更多Python学习内容:ipengtao.com

在 Python 中,super() 函数是一个非常有用的内置函数,用于调用父类的方法,特别是在多重继承的情况下。本文将深入探讨 super() 函数的工作原理、用法以及常见应用场景,并提供丰富的示例代码帮助更好地理解和应用这个函数。

什么是 super() 函数?

super() 函数用于调用父类的方法,在子类中可以使用 super() 来访问父类的属性和方法,从而实现对父类的调用和扩展。

super() 函数的语法如下:

super([type[, object-or-type]])
  • type 是类名或类型名,用于指定要调用其父类的方法。

  • object-or-type 是对象或类,用于指定要调用父类方法的对象或类。如果省略,会自动传入当前类和对象。

super() 函数的基本用法

先来看一些 super() 函数的基本用法。

1. 在子类中调用父类的方法

  1. class Parent:
  2.     def show(self):
  3.         print("Parent method called")
  4. class Child(Parent):
  5.     def show(self):
  6.         super().show()
  7.         print("Child method called")
  8. obj = Child()
  9. obj.show()

在这个示例中,子类 Child 中的 show() 方法调用了父类 Parent 中的 show() 方法,通过 super().show() 实现了对父类方法的调用。

2. 在多重继承中调用父类的方法

  1. class Parent1:
  2.     def show(self):
  3.         print("Parent1 method called")
  4. class Parent2:
  5.     def show(self):
  6.         print("Parent2 method called")
  7. class Child(Parent1, Parent2):
  8.     def show(self):
  9.         super().show()
  10.         print("Child method called")
  11. obj = Child()
  12. obj.show()

在这个示例中,子类 Child 中的 show() 方法调用了多个父类 Parent1 和 Parent2 中的 show() 方法,通过 super().show() 实现了对多个父类方法的调用。

super() 函数的常见应用场景

super() 函数在实际编程中有许多应用场景,以下是一些常见的用法:

1. 在构造函数中调用父类的构造函数

  1. class Parent:
  2.     def __init__(self, name):
  3.         self.name = name
  4. class Child(Parent):
  5.     def __init__(self, name, age):
  6.         super().__init__(name)
  7.         self.age = age
  8. obj = Child("Alice"30)
  9. print(obj.name, obj.age)  # Alice 30

在这个示例中,子类 Child 中的构造函数调用了父类 Parent 中的构造函数,通过 super().__init__(name) 实现了对父类构造函数的调用,并初始化了子类特有的属性 age

2. 在方法重写中实现扩展

  1. class Parent:
  2.     def show(self):
  3.         print("Parent method called")
  4. class Child(Parent):
  5.     def show(self):
  6.         super().show()
  7.         print("Child method called")
  8. obj = Child()
  9. obj.show()

在这个示例中,子类 Child 中的 show() 方法重写了父类 Parent 中的同名方法,并通过 super().show() 实现了对父类方法的调用,在子类方法中添加了额外的功能。

3. 在静态方法和类方法中使用 super()

除了在实例方法中使用 super() 函数外,还可以在静态方法和类方法中使用它来调用父类的方法。

在静态方法中使用 super()
  1. class Parent:
  2.     @staticmethod
  3.     def show():
  4.         print("Parent static method called")
  5. class Child(Parent):
  6.     @staticmethod
  7.     def show():
  8.         super().show()
  9.         print("Child static method called")
  10. Child.show()

在这个示例中,子类 Child 中的静态方法 show() 调用了父类 Parent 中的同名静态方法,并在调用前后分别输出提示信息。

在类方法中使用 super()
  1. class Parent:
  2.     @classmethod
  3.     def show(cls):
  4.         print(f"Parent class method called from {cls.__name__}")
  5. class Child(Parent):
  6.     @classmethod
  7.     def show(cls):
  8.         super().show()
  9.         print(f"Child class method called from {cls.__name__}")
  10. Child.show()

在这个示例中,子类 Child 中的类方法 show() 调用了父类 Parent 中的同名类方法,并在调用前后分别输出提示信息。

4. 多重继承中的 super()

在多重继承的情况下,super() 函数按照方法解析顺序 (Method Resolution Order, MRO) 来确定调用哪个父类的方法。MRO 可以通过类的 __mro__ 属性来查看。

  1. class A:
  2.     def show(self):
  3.         print("A method called")
  4. class B(A):
  5.     def show(self):
  6.         super().show()
  7.         print("B method called")
  8. class C(A):
  9.     def show(self):
  10.         super().show()
  11.         print("C method called")
  12. class D(B, C):
  13.     def show(self):
  14.         super().show()
  15.         print("D method called")
  16. obj = D()
  17. obj.show()
  18. print(D.__mro__)

在这个示例中,类 D 继承了类 B 和类 C,通过 super() 函数调用父类方法时,按照 MRO 的顺序调用了各个父类的方法,并输出了 MRO 结果。

总结

super() 函数是 Python 中一个非常强大和灵活的函数,用于调用父类的方法,特别是在多重继承的情况下。通过合理地应用 super() 函数,可以轻松地实现对父类方法的调用和扩展,使得代码更加灵活和易于维护。希望本文提供的示例和解释能够帮助大家更好地理解和应用 super() 函数,在实际开发中发挥更大的作用。

如果你觉得文章还不错,请大家 点赞、分享、留言 ,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com

b5e4c4977232c13c0a788c5927fa8209.jpeg

↙点击下方“阅读原文”查看更多

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号