继承时是否需要初始化父类?

时间:2014-12-17 22:52:52

标签: python super

如果我从一个类继承并且没有更改方法中的任何内容,是否需要使用super来从父类初始化该方法?

class A:

   def __init__(self):
       self.html = requests.get("example.com").text


class B(A):

    def __init__(self):
        # is this needed?
        super(B, self).__init__()

    def new_method(self):
        print self.html

2 个答案:

答案 0 :(得分:5)

由于您在班级__init__中创建了B方法,因此会覆盖A中的方法。如果你想要它被执行,你将不得不使用super(),是的。

但是,如果你在B.__init__中没有做任何 else ,你可以省略它:

class A:
   def __init__(self):
       self.html = requests.get("example.com").text

class B(A):
    def new_method(self):
        print self.html

如果你想对A.__init__()所做的 做任何事情,那么创建B.__init__()方法是有意义的,并且从该方法调用父{ {1}}。

答案 1 :(得分:2)

根本不需要定义覆盖方法。 Python的默认行为是调用父类(方法解析顺序中的下一个类)的方法,如果当前类没有覆盖它。

>>> class Foo(object):
...   def __init__(self):
...     print("Foo")
... 
>>> class Bar(Foo): pass
... 
>>> Bar()
Foo
<__main__.Bar object at 0x7f5ac7d1b990>

注意&#34; Foo&#34;在我初始化Bar实例时打印出来。


如果你确实定义了这个方法,你需要调用超类的方法(显式或超级),如果你想确保它被调用。