Super()不会将父类保留在

2024-05-20 20:25:54 发布

您现在位置:Python中文网/ 问答频道 /正文

为了理解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

“鲍勃·弗雷普斯”

有什么区别?第一个版本应该使用父类的名称。你知道吗


Tags: nameselfinitemaildefclasspersonbob
1条回答
网友
1楼 · 发布于 2024-05-20 20:25:54

不同之处在于,您手动复制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的定义来利用新的更改。你知道吗

相关问题 更多 >