python类的实例化顺序以及和java的异同

版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/90200689

 

python代码如下。

class Son():
    def __init__(self):
        print ( "son say hi" )
    print("haha")
 
if __name__=='__main__':
    son=Son()

运行结果如下:

再试用下面代码,只有几个类的定义,没有实例化。

class Fb():
    def __init__(self):
        print ( "Fb类的构造函数" )
    print("Fb类的普通语句")
class Fa():
    def __init__(self):
        print ( "Fa类的构造函数" )
    print("Fa类的普通语句")

class Fc(Fa):
    #def __init__(self):
        #print ( "Fc类的构造函数" )
    print("Fc类的普通语句")
 
class Son(Fc):
    ss=12
    def __init__(self):
        #super().__init__()
        #Fb.__init__(self)
        print ( "子类的构造函数" )
    print("子类的普通语句")

结果为:

由此得知,python类在创建对象时,及实例化时才执行构造函数__init__。而在程序刚开始,运行到类的定义时,会先执行类的普通语句,对类进行一个注册,注册是按照类定义的先后顺序执行的。

这个和java有些相似之处和不同之处。

java的类中除了变量和方法外,可以有初始化块,java的初始化块是需要使用到某些类的时候才开始执行相应类的初始化块等,没有使用的类即使有定义也不会执行其初始化代码块。而python的类是只要有类定义就执行这些类的普通语句,即使有的类最后并没有使用,等实例化某类的时候再启动某类的构造函数。

如果涉及继承,也有不同。python是先执行完所有的普通语句,再执行构造函数。java是根据继承顺序,先执行静态初始化块,再根据类的继承顺序逐个地先执行普通初始化块再执行构造函数。

java创建实例时代码执行顺序 python创建实例时代码执行顺序
父类的静态初始化块 父类的普通语句
子类的静态初始化块 子类的普通语句
父类的普通初始化块  
父类的构造函数 父类的构造函数
子类的普通初始化块  
子类的构造函数 子类的构造函数

python的实例化顺序是怎么知道的呢?

class Fa():
    def __init__(self):
        print ( "Fa父类的构造函数" )
    print("FA父类的普通语句")
 
class Son(Fa):
    def __init__(self):
        super().__init__()
        print ( "子类的构造函数" )
    print("子类的普通语句")
 
if __name__=='__main__':
    son=Son()

 

独孤尚良dugushangliang——著

你可能感兴趣的:(Python,Java)