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

系统 227 0

版权声明:转载请注明作者(独孤尚良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——著


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论