Python中实例化类的执行顺序示例详解

  

  

本文主要介绍了关于Python实例化类的执行顺序的相关内容、下面话不多说了,来一起看看详细的介绍吧

  


  

  

一般来说一个类里面有类变量和方法,比如我们定义一个名为一的类

        甲级():   酒吧="我的爱人爱我"      def __init__(自我、名称):   print(“的类”,自我。__class__进行名称)      

我们在这个类里面定义了一个类变量杆和一个构造方法__init__,那么我们实例化一个()时都发生了什么呢!看官不要急,听我慢慢道来…

  
      <李>首先,python调用内置的类类型,没有听错,就是我们平时用来测引用类型的那个类型,然后调型用内置的元类mateClass, mateClass再调用__new__方法将类实例化,此时完成了第一步李   <李>然后,这个实例将会初始化自己的类变量,就是把自己从头到尾扫视一遍,李   <李>之后,进入构造方法,并初始化自己的实例变量。   
  
  

注意:python中类变量和实例变量是不一样的,
  类变量:不用实例化也可以访问。
  实例变量:是动态创建的。必须实例化之后才可以访问,因为之前是不存在的。

     

比如下面这个例子:不实例化访问类变量

        甲级():   一个=2   打印(一)      

输出:
  

  
  2,

祝辞祝辞的在
  

     

说了这么多,上代码。看看类继承时怎么运行的:

        甲级():   def __init__(自我、名称):   print(“的类”,自我。__class__进行名称)      B类(一个):   def __init__(自我、名称):   自我。_name=名字   一个。__init__(自我,名称)   print (B的类,自我。__class__进行名称)   print(这是B类)      C类(B):   def __init__(自我、名称):   B。__init__(自我,名称)   print (C类的)      if __name__==癬_main__”:      c=c(李)      

输出如下:

  
  

这是B类
  一个类& lt;类“__main__.C”比;李
  B类& lt;类__main__.C的祝辞李
  丙类
  

     

来现身说法,解释一波

  
      <李>首先对类C()进行实例化,从头到尾扫一遍,然后进入C()的构造,遇到了父类C()的构造方法B。李__init__。   <李>进入乙级(),从头到尾扫一遍,执行了<代码>打印(这是B类)语句然后进入B()的构造,遇到了父类B()的构造方法A.__init__。   <李>进入类(),从头到尾扫一遍,然后进入一个()的构造方法A.__init__。然后。__init__执行完毕并弹出栈,甲级()执行完毕并弹出栈。   <李>回到乙级(),从上次未执行完的地方<代码>打印(B的类,自我。__class__进行名称)继续执行。然后B。__init__执行完毕并弹出栈,B类()执行完毕并弹出栈。   <李>回到类C(),从上次未执行完的地方<代码>打印(C类的)继续执行。然后C。__init__执行完毕并弹出栈,类C()执行完毕并弹出栈。程序运行完毕。   <李>由于是对类C()进行实例化,上面的自我都是指类C()的实例而不是甲级()的或者B类()的。因此self.__class__清一色的显示<代码> & lt;类__main__.C的祝辞> & lt;类__main__.A的祝辞或<代码> & lt;类__main__.B的祝辞>   
  

随便补充一下使用类型关键字动态创建类的知识点,敲黑板,,,我要用CET3.5的英语水平向大家翻译一部分官方文档对类型的描述啦。

  
  

使用三个参数,返回一个新类型对象。这实际上是类语句的动态形式。名称字符串是类名,并成为__name__属性;基元元组列出基类并成为祝辞__bases__属性,并且dict字典是包含类主体定义的命名空间,并被复制到标准字典以成为__dict__属性。
  

     

怎么样,是不是很拗口,是不是大写的懵* . so,上代码,以下两种写法输出一样的都是输出:重写名字方法1

        类X ():   一个=1   def __name__(自我):   返回“重写名字方法”   x=x ()   打印(x.__name__ (), x.a)            X=类型(“重写名字方法”,(对象)、dict (=1))   x=x ()   打印(X。__name__ x.a)      

类型动态创建实例化时,第一个参数就相当于重写了类的__name__方法。X类但__name__属性却不叫X,呵,好反人类的写法

Python中实例化类的执行顺序示例详解