蟒蛇日志|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(自己)

    问题:Python 中的self的作用是什么? 这其实是函数和类的区别,函数不需要self,类需要这个参数。 以下...

  • Can't add self as subview

    最近在iOS的项目中出现了Can't add self as subview 的crash,日志信息如下 从日志上...

  • PySyncObj 源码解读 | Raft

    创建日志对象,默认是新建一个MemoryJournal对象 self.__raftLog = createJour...

  • 蟒蛇

    从前有一个 村子有一天晚上夜黑风高天空上下起了暴雨闪电也特别的大那你得村民都说从来都没有见过这么大的雨这天晚的很...

  • 蟒蛇

  • 蟒蛇

    一提及蟒蛇,大多数人脑海里头肯定都能联想到各种电影里面的场景。 但是生活中要遇到蟒蛇的可能性是微乎其...

  • 2.4蟒蛇绘制程序分析

    蟒蛇绘制程序分析 python蟒蛇实例 import turtle def drawSnake(rad, angl...

  • 不见自己 哈代

    The Self-Unseeing 不见自己 The Self-Unseeing Here is the anci...

  • 孩子囗中的金句

    孩子说——老师是大蟒蛇,自己是小老鼠,妈妈是小蚂蚁

  • 停止进食的蟒蛇

    停止进食的蟒蛇 朋友养了一条宠物蟒蛇。那是一条很大很大的巨蟒,当然,也没有毒。他总是把蟒蛇单独留在家里,留下食物,...

网友评论

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

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