试图理解super(),我举了两个例子,但是它们返回相同的结果。
这是super()
class Person1():
def __init__(self, name):
self.name = name
class EmailPerson1(Person1):
def __init__(self, name, email):
super().__init__(name)
self.email = email
bob2 = Person('Dim')
bob = EmailPerson1('Bob Frapples', 'bob@frapples.com')
bob.name
'鲍勃·弗洛普莱斯'
并且没有super()
class Person():
def __init__(self, name):
self.name = name
class EmailPerson(Person):
def __init__(self, name, email):
self.name = name
self.email = email
bob2 = Person('Dim')
bob1 = EmailPerson('Bob Frapples', 'bob@frapples.com')
bob1.name
'鲍勃·弗洛普莱斯'
有什么区别?第一个版本应该使用我认为的父类的名称。
答案 0 :(得分:0)
区别在于您是手动复制Person.__init__
中EmailPerson.__init__
所做的工作,而不是使用super().__init__
来确保继承的初始化程序完成了所需的工作。
class Person():
def __init__(self, name):
self.name = name
class EmailPerson(Person):
def __init__(self, name, email):
self.name = name
self.email = email
使用super
,即
class EmailPerson(Person):
def __init__(self, name, email):
super().__init__(name)
self.email = email
表示如果有人更新了Person
的定义以在Person.__init__
中做一些额外的工作:
class Person:
def __init__(self, name):
self.name = name.title() # bob grapples -> Bob Frapples
您完全不需要更新EmailPerson
的定义即可利用新的更改。