什么在这里开心?python Override

时间:2016-08-31 14:37:14

标签: python oop constructor

案例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构造函数?或者发生了什么 "我是编程新手。"

1 个答案:

答案 0 :(得分:2)

根据文档,构建类时,始终记住基类。因此,如果找不到某个属性,它将解析所有依赖项,该过程适用于所有基类。在您的情况下,类B没有init方法,因此它调用其父方法。在第二个示例中,如果要运行基类的构造函数,则可以使用super()函数。