gpt4 book ai didi

python - 为什么子进程的init方法中使用Python super?

转载 作者:行者123 更新时间:2023-12-02 04:30:23 24 4
gpt4 key购买 nike

根据Python docs super ()

is useful for accessing inherited methods that have been overridden in a class.

我知道 super 指的是父类,它允许您访问父方法。我的问题是为什么人们总是在子类的 init 方法中使用 super ?我到处都看到过它。例如:

class Person:

def __init__(self, name):
self.name = name

class Employee(Person):
def __init__(self, **kwargs):
super().__init__(name=kwargs['name']) # Here super is being used

def first_letter(self):
return self.name[0]

e = Employee(name="John")
print(e.first_letter())

我可以在没有 super 甚至没有 init 方法的情况下完成同样的任务:

class Person:

def __init__(self, name):
self.name = name

class Employee(Person):

def first_letter(self):
return self.name[0]

e = Employee(name="John")
print(e.first_letter())

后一个代码有缺点吗?对我来说它看起来干净多了。我什至不必使用样板 **kwargs 和 kwargs['argument'] 语法。

我正在使用Python 3.8。编辑:这是一个 nother stackoverflow问题中有来自不同人的代码,他们在 child 的 init 方法中使用 super 。我不明白为什么。我最好的猜测是 Python 3.8 中有一些新东西。

最佳答案

子类可能想做一些与父类(super class)所做的不同的或更可能附加的事情 - 在这种情况下,子类必须有一个 __init__

调用 super 的 init 意味着您不必在子类 init 中复制/粘贴该 init(这会影响维护),否则如果您想在子 init 中添加一些额外的代码,则需要这样做。

但请注意,如果您使用多重继承(例如调用哪个 super),则使用 super 的 init 会很复杂,这需要小心。就我个人而言,我会避免多重继承并将继承保持在最低限度 - 很容易被诱惑创建多个继承/类层次结构,但我的经验是“保持简单”的方法通常会更好。

关于python - 为什么子进程的init方法中使用Python super?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61174178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com