python笔记——__init__方法与self详解

系统 575 0

前后都加双下划綫的方法在python中是独一无二的,加下划线的目的在于避免与普通方法名称冲突。
本文中主要深入理解在定义类的时候必须用到的__init__方法。
在进行详细叙述之前,给大家普及一下,类中的方法和属性。

  • 方法:也就是各类中定义的函数,比如我们定义一个车的类,描述车的函数就是一个方法。
  • 属性:车的品牌、型号、生产日期等信息就是它的属性

1、__init__方法:无需直接调用,生成实例对象的时候自动调用。


“init”的全称是“initialize”,也就是初始化的意思,所以__init__又称构造方法。

在定义类的时候__init__()方法是必不可少的。
init()这种初始化方法,用来初始化新创建对象的属性,在一个对象被创建以后会立即调用,比如像实例化一个类:

demo

            
              
                class
              
              
                Car
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              make
              
                ,
              
              model
              
                ,
              
              year
              
                )
              
              
                :
              
              
                ###
              
              
        self
              
                .
              
              make 
              
                =
              
               make
        self
              
                .
              
              model 
              
                =
              
               model
        self
              
                .
              
              year 
              
                =
              
               year 
my_car 
              
                =
              
               Car
              
                (
              
              
                'aodi'
              
              
                ,
              
              
                'A4'
              
              
                ,
              
              
                '2010'
              
              
                )
              
              
                print
              
              
                (
              
              my_car
              
                .
              
              model
              
                )
              
            
          
            
              aodi

            
          

程序中没有直接调用__init__方法,但make,model,year等属性通过Car()类自动调用了__init__方法,生成了属性。

2、self参数


“self”的英文意思很明显,是自己的意思。

这里自己隐含的含义是

  1. 指的是,实例Instance本身。

  2. 同时, 由于说到“自己”这个词,都是和相对而言的“其他”而说的;而此处的其他,指的是,类Class,和其他变量,比如局部变量,全局变量等。
    此处的self,是个对象(Object),是当前类的实例。
    因此,对应的self.valueName 和 self.function()中的valueName:表示self对象,即实例的变量。与其他的,Class的变量,全局的变量,局部的变量,是相对应的。
    function:表示是调用的是self对象,即实例的函数。与其他的全局的函数,是相对应的。

因为Python已经规定:函数的第一个参数,就必须是实例对象本身,并且约定俗成,把其名字写为self。因此我们再定义类中的所有函数时必须传入self参数。

demo

            
              
                class
              
              
                Car
              
              
                (
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              make
              
                ,
              
              model
              
                ,
              
              year
              
                )
              
              
                :
              
              
                ###
              
              
        self
              
                .
              
              make 
              
                =
              
               make
        self
              
                .
              
              model 
              
                =
              
               model
        self
              
                .
              
              year 
              
                =
              
               year 
    
              
                def
              
              
                get_descriptive_name
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        long_name 
              
                =
              
               self
              
                .
              
              year
              
                +
              
              
                ' '
              
              
                +
              
              self
              
                .
              
              make
              
                +
              
              
                " "
              
              
                +
              
              self
              
                .
              
              model
        
              
                print
              
              
                (
              
              self
              
                )
              
              
                ###看下self指向哪里
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              self
              
                )
              
              
                )
              
              
                ###看下self类型是什么
              
              
                return
              
               long_name
my_car 
              
                =
              
               Car
              
                (
              
              
                'aodi'
              
              
                ,
              
              
                'A4'
              
              
                ,
              
              
                '2010'
              
              
                )
              
              
my_car
              
                .
              
              get_descriptive_name
              
                (
              
              
                )
              
            
          

输出内容:

            
              
                <
              
              __main__
              
                .
              
              Car 
              
                object
              
               at 
              
                0x000001D31F7408D0
              
              
                >
              
              
                ##可以看出self指向的是一个对象,也就是我们用my_car的实例对象 == self
              
              
                <
              
              
                class
              
              
                '__main__.Car'
              
              
                >
              
              
                ## self的类型是Car类的实例对象
              
              
                '2010 aodi A4'
              
            
          

参考文献:https://www.cnblogs.com/ant-colonies/p/6718388.html


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

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

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

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