Super() 不保留父级的类信息



试图理解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

"鲍勃·弗拉普尔斯">

有什么区别?我认为第一个版本应该使用父类的名称。

不同之处在于您手动复制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的定义即可利用新的更改。

最新更新