【发布时间】:2016-08-31 14:37:14
【问题描述】:
案例 1:
class A(object):
def __init__(self):
print "A"
class B(A):
pass
c = b()
#output:
#A
案例 2:
class A(object):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
c = b()
#output:
#B
在 case1 中运行 class A 的构造函数,在 case2 中运行 class B 的构造函数。
所以如果 case1 打印 A 被理解为它正在运行 class A 构造函数,因为 class B 继承了它。
那么在 case2 中,它只运行 class B 构造函数,而不运行 class A 构造函数,这是为什么。
现在这里发生了什么。 python 是否覆盖了class A 构造函数?或者发生了什么
“我是编程新手。”
【问题讨论】:
-
initializer 正在被覆盖。可以使用
super访问父 initializer。 -
如果您将
__init__放入B,它将覆盖A中的那个。如果你不这样做,它就不会。 Python 的__init__方法不会自动调用超类的__init__方法。而且我不知道你为什么在标题中加上“overload”。 -
“根据 OOP 的概念,构造函数不能被继承。” – 谁说的?
-
“它应该在 case2 中运行两个构造函数” – 谁说的?
-
你读过教程中的9, Classes吗?值得一读——对我来说好几遍。
标签: python oop constructor