跳到主要内容

简述super()和super(props)有什么区别?

参考答案:

在Python中,super()函数是用于调用父类(或超类)的一个方法。在面向对象编程中,当一个类继承自另一个类时,子类可以覆盖(或重写)父类的方法。但是,有时子类可能希望在其自己的方法中调用父类的同名方法。这就是super()函数的用途。

super()super(props)在基本功能上是一样的,都是用来调用父类的方法。然而,它们在使用方式和上下文中有一些差异。

  1. super()

当你只写super()时,Python会自动推断出你想要调用哪个父类的方法。这是Python 3的推荐用法,因为它更简洁,并且Python解释器能够自动处理一些细节。

例如:

class Parent:
    def hello(self):
        print("Hello from Parent")

class Child(Parent):
    def hello(self):
        super().hello()  # 调用父类的hello方法
        print("Hello from Child")

c = Child()
c.hello()

输出:

Hello from Parent
Hello from Child
  1. super(props)

在Python 2中,super()函数需要明确传入当前类和实例作为参数。在Python 3中,这种用法仍然有效,但不再推荐。

例如:

class Parent:
    def hello(self):
        print("Hello from Parent")

class Child(Parent):
    def hello(self):
        super(Child, self).hello()  # 调用父类的hello方法
        print("Hello from Child")

c = Child()
c.hello()

输出:

Hello from Parent
Hello from Child

注意,super(props)中的props应该是一个类,而不是一个实例。然而,由于Python 3中的super()可以自动推断这些信息,因此通常不需要显式地传递它们。

总的来说,推荐使用super()而不是super(props),因为前者更简洁,更易于理解,也是Python 3的推荐用法。