这里发生了什么?python覆盖了吗
案例1:这里发生了什么?python覆盖了吗,python,oop,constructor,Python,Oop,Constructor,案例1: class A(object): def __init__(self): print "A" class B(A): pass c = b() #output: #A class A(object): def __init__(self): print "A" class B(A): def __init__(self): print "B" c = b() #output: #B 案例2: class A(
class A(object):
def __init__(self):
print "A"
class B(A):
pass
c = b()
#output:
#A
class A(object):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
c = b()
#output:
#B
案例2:
class A(object):
def __init__(self):
print "A"
class B(A):
pass
c = b()
#output:
#A
class A(object):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
c = b()
#output:
#B
在案例1中,它运行A类
的构造函数;在案例2中,它运行B类
的构造函数
因此,如果case1打印A,则理解为它正在运行类A
构造函数,因为类B
继承了它
然后在案例2中,它只运行类B
构造函数,而不运行类A
构造函数。这是为什么
现在这里发生了什么。python是否覆盖了类A
构造函数?或者发生了什么
“我是编程新手。”根据文档,当构建一个类时,基类总是被记住。因此,它将解析所有依赖项。如果找不到某个属性,该过程将在所有基类中工作。在您的例子中,类B没有init方法,因此它调用其父方法。在第二个示例中,如果要运行基类的构造函数,可以使用super()函数 正在覆盖初始值设定项。可以使用
super
访问父初始值设定项。如果在B
中放置\uuu init\uuu
,它将覆盖A
中的初始值设定项。如果你不这样做,它就不会。Pythons\uuuu init\uuuu
方法不会自动调用超类的\uuuu init\uuu
方法。我不知道你为什么在标题中加上“重载”。“按照OOPs的概念,构造函数不能被继承。”–说谁?“在案例2中它应该同时运行两个构造函数”–说谁?你读过教程了吗?这本书值得我读几遍。