这里发生了什么?python覆盖了吗

这里发生了什么?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(

案例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(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中它应该同时运行两个构造函数”–说谁?你读过教程了吗?这本书值得我读几遍。