1. 编程学习网 > 编程教程 > Python教程 > python-self参数

python-self参数

self参数

对于学过其他面向对象编程的语言(比如c++)的同学来说,self很好理解,就是c++里面的this指针,但是对于首次接触面向对象编程的同学来说,可能会有所困惑,不过通过本节对self参数的详解,相信你会明白的。
上一节中我们学会了定义一个类并创建对象,在类的方法里面和我们以往学习的函数不一样的是,类中的每一个方法都要求将 self 参数作为方法的第一个参数。但是,在实际调用方法的时候,我们并不需要给这个self传递任何实参,只需要按照self之后的若干形参进行传递即可,那么就有一个问题,我们不写这个self不行吗?我们可以试一下:

这是一个只有一个普通方法的car类,使用它创建了一个bmw对象,并调用了fun()方法,在参数列表里没有self,这时它就和一个普通函数没有区别,我们运行代码发现结果如下:


可以看到,报错原因是因为fun()函数的参数位置是0个,但是给出了1个。
我们知道,如果把这个函数放在类外,去调用它是完全没有问题的,但是在类里定义方法的时候,必须加上一个self参数,因为在使用类创建对象时,对象调用类方法是难免的,在这个调用过程中,该对象会把自身的引用作为第一个参数自动传给该方法,也就是说,python 在执行的时候会自动绑定类方法的第一个位置的参数并指向调用该方法的对象。
所以,我们按照python解释器的要求,必须在类方法的参数列表里至少添加一个参数,其实这个参数是可以自定义名称的,大家可以试试在上述程序的fun()函数参数中指定任意名称的参数试一下,程序是可以正常执行的,但是如果这样随意命名,就会有无数的名称出现在类方法的第一个参数位置,为了更好的可读性,python程序员约定了一种统一的命名,就是self参数。
再通俗点讲,我们可以定义一个房子类,把它看出是造房子的图纸,这个类可以创建无数对象,就好比拿着图纸可以造出无数栋房子,但是,即便是造出来的房子再多,它的外形再一样,它里面住的人是不能一样的,每个房子都属于不同的主人,而我们的self参数就代表了每个房子主人对房子的所有权,好比一把钥匙,它可以保证每个房子的主人都能打开自己的房门,而别的房主是无法进去你的房子的。
对于构造方法来说,self参数代表该构造方法正在初始化的对象,所以,对于类所创建对象来说,在调用类方法时,不需要为第一个参数传值。从效果的角度来理解:类的实例对象obj对应着参数self,obj创建时自动调用构造方法从而导入实例属性中的所有变量,当然,self的属性数据,也并不一定非要通过形参和实参传入,也可以直接在构造函数中自定义值。比如在构造方法中可以这样:



self参数可以被形象地理解为“内外兼修”,将实例对象obj和self对应起来就是self主内,obj对象主外,通过self实例,实现数据在类内部的流转,将数据导入到对象中。

本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/Python/2020/0118/530.html

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休