为什么在孩子的init方法中使用Python super?

多元宇宙

根据Python文档super()

对于访问已在类中重写的继承方法很有用。

我知道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。编辑:这是另一个stackoverflow问题,其中包含来自在孩子的init方法中使用super的不同人员的代码。我不明白为什么。我最好的猜测是Python 3.8中有一些新功能。

史蒂夫

后者代码的潜在缺点是__init__Employee类中没有方法。由于没有,因此__init__将调用父类方法。但是,一旦将__init__方法添加到Employee类中(可能需要初始化某些特定于Employee的属性,例如id_number),则__init__父类方法将被覆盖并且不被调用(除非super.__init__()被调用),然后员工将没有name属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在方法声明中使用super

来自分类Dev

在Java中使用Super

来自分类Dev

为什么我需要在Android中使用super()?

来自分类Dev

什么时候调用Python的super().__ init __()?

来自分类Dev

为什么要在self.ransackable_attributes方法中使用`super`?(路轨)

来自分类Dev

为什么需要在这段代码中使用 super 方法

来自分类Dev

什么时候在python中使用super(type)?

来自分类Dev

什么时候在python中使用super(type)?

来自分类Dev

为什么“ T.super.toString()”和“ super :: toString”使用合成访问器方法?

来自分类Dev

什么是Interface.super

来自分类Dev

为什么在Python中子类不能使用super调用父类方法

来自分类Dev

在Python的子类成员中使用super

来自分类Dev

在Python中使用super()进行多重继承

来自分类Dev

在Python的子类成员中使用super

来自分类Dev

为什么在子类的init方法实现中不需要[super alloc]?

来自分类Dev

为什么在子类的init方法实现中不需要[super alloc]?

来自分类Dev

为什么super不引用super类中的变量?

来自分类Dev

Java super toString方法

来自分类Dev

了解python中的Super()

来自分类Dev

Python super()传递* args

来自分类Dev

Python 2.7 super()错误

来自分类Dev

Java继承,使用super()

来自分类Dev

使用TypeScript super()

来自分类Dev

在“super.init”调用之前在方法调用“foo”中使用“self”

来自分类Dev

多重继承Python,super().__ init__问题

来自分类Dev

为什么在Rascal的Java AST中使用表达式“ super()”?

来自分类Dev

为什么在子类中使用 super(qualifications) 在超类中定义时会抛出 ReferenceError ?

来自分类Dev

为什么要用Java调用super()?

来自分类Dev

别名self = super(...).__ new __(...)?为什么?

Related 相关文章

  1. 1

    在方法声明中使用super

  2. 2

    在Java中使用Super

  3. 3

    为什么我需要在Android中使用super()?

  4. 4

    什么时候调用Python的super().__ init __()?

  5. 5

    为什么要在self.ransackable_attributes方法中使用`super`?(路轨)

  6. 6

    为什么需要在这段代码中使用 super 方法

  7. 7

    什么时候在python中使用super(type)?

  8. 8

    什么时候在python中使用super(type)?

  9. 9

    为什么“ T.super.toString()”和“ super :: toString”使用合成访问器方法?

  10. 10

    什么是Interface.super

  11. 11

    为什么在Python中子类不能使用super调用父类方法

  12. 12

    在Python的子类成员中使用super

  13. 13

    在Python中使用super()进行多重继承

  14. 14

    在Python的子类成员中使用super

  15. 15

    为什么在子类的init方法实现中不需要[super alloc]?

  16. 16

    为什么在子类的init方法实现中不需要[super alloc]?

  17. 17

    为什么super不引用super类中的变量?

  18. 18

    Java super toString方法

  19. 19

    了解python中的Super()

  20. 20

    Python super()传递* args

  21. 21

    Python 2.7 super()错误

  22. 22

    Java继承,使用super()

  23. 23

    使用TypeScript super()

  24. 24

    在“super.init”调用之前在方法调用“foo”中使用“self”

  25. 25

    多重继承Python,super().__ init__问题

  26. 26

    为什么在Rascal的Java AST中使用表达式“ super()”?

  27. 27

    为什么在子类中使用 super(qualifications) 在超类中定义时会抛出 ReferenceError ?

  28. 28

    为什么要用Java调用super()?

  29. 29

    别名self = super(...).__ new __(...)?为什么?

热门标签

归档