试图理解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
的定义即可利用新的更改。