根据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] 删除。
我来说两句