蟒蛇日志|self(自己)

作者: 不如乐之 | 来源:发表于2022-01-31 16:08 被阅读0次

    问题:Python 中的self的作用是什么?

    这其实是函数和类的区别,函数不需要self,类需要这个参数。

    以下对比函数和类,从中体会self的作用:

    一、函数

    先看函数:

    函数

    运行结果如下:

    输出结果

    二、类

    正常的类是这样的:

    (一)第一次尝试

    第一次尝试,把__init__函数的self.name改为name,结果是属性错误:“dog”对象没有属性“name”,如下:

    第一次尝试

    明明类里面的函数__init__函数有name这个参数,但是程序却无法识别,原因是my_dog.name引用的是self.name,而不是name。整个过程是:旺财给了__init__函数的name,name再给到self.name,self.name再给到my_dog.name。

    因此推断:self的作用之一是代替my_dog。Dog类编写的时候,并不知道用户取了名为my_dog的变量,所以需要使用通用的self来代替my_dog。

    所以,__init__函数中的self.name=name不是废话,是有用的。

    (二)第二次尝试

    把最后面的两句print放到__init__函数里面,这时候my_dog.name可以使用name了,如下图:

    这时候还需要self吗?

    第二次尝试,把第一个函数__init__中的self删掉,结果程序报错:__init__只有两个参数,但是给了3个值,如下:

    第二次尝试

    推断,这个多给的是程序自动给的参数,就是self,即调用类的时候,程序自动给类里面的函数的第一个参数是self,为了看到这个自动给的参数,我删掉“旺财”,结果如下:

    因此,self的作用之一是自动给类里面的函数第一个参数赋值。

    同时此时,程序报错,“dog”对象没有属性“name”,因为sit函数里面没有name这个参数。通过给所有函数加上第一个参数self,就正常运行了:

    这和原来的程序相比,现在sit函数和roll_over函数需要两个参数。原来的程序之所以只需要一个参数,是因为name加了self前缀可以在类里面的各函数中使用,所以:

    self的作用之一节省变量,让函数更简洁。

    但是,仅仅在name前面加上self前缀是不行的,还要在__init__ 函数中先定义self.name=name。

    综上,self是类的核心,是与函数的主要区别,self的作用包括,代替实例中的变量;自动给类里面的函数第一个参数赋值;节省变量,让函数更简洁。

    相关文章

      网友评论

        本文标题:蟒蛇日志|self(自己)

        本文链接:https://www.haomeiwen.com/subject/yvlhkrtx.html