如果我从一个类继承并且没有更改方法中的任何内容,是否需要使用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
答案 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
实例时打印出来。
如果你确实定义了这个方法,你需要调用超类的方法(显式或超级),如果你想确保它被调用。