一、前言
在这里我想通过用Python和Java语言的类比来对Python中的self参数和__init__(self)方法做一个深入的解释。这样可以加深对self参数和__init__(self)方法的理解。
废话不多说,直接用代码举例,然后通过代码来理解Python中的self参数和__init__(self)方法。
我们用一个学生类来作为案例。
二、Python和Java类比
- 一些tips:
- self代表的是类的实例对象
- self是指当前被调用的对象
2.1 Python
案例介绍:创建一个Stu类,属性为学号、姓名、性别,方法为打印出学生的信息。
class Stu:
def __init__(self,stuid,name,gender):
self.stuid = stuid
self.name = name
self.gender = gender
def info(self):
print('学号:{} 姓名:{} 性别:{}'.format(self.stuid, self.name, self.gender))
djk = Stu(123,'djk',1)
djk.info()
- 注解:
- self是指当前被调用的实例对象,__init__(self)是类的构造方法,负责初始化一个实例对象的。
- 举例:假如我们要初始化了一个实例对象djk时,Python会自动调用__init__(self)方法,这时,self代表的是要创建的这个对象djk;self.stuid = stuid时代表什么意思呢:首先self代表当前对象djk,self.stuid就是当前对象djk的属性stuid被赋予为stuid这个值,也就是123;即形参与实参相互对应,即stuid<–>123,name<–>‘djk’,gender<–>1。然后djk对象调用Info(self)方法,其实底层代码是Info(djk),但Python为了简洁,把djk给省略了,直接写成djk.info()即可,其实self还是指向的是djk这个实例对象。
2.2 Java
public class Stu {
// attribute
private Integer numid;
private String name;
private boolean gender;
// function
public Stu(Integer numid, String name, boolean gender) {
this.numid = numid;
this.name = name;
this.gender = gender;
}
public void info(Stu stu){
System.out.println(stu.numid + stu.name + stu.gender);
}
// 测试
public static void main(String[] args) {
Stu djk = new Stu(123,"djk",false);
djk.info(djk);
}
}
这里因为主要介绍的是Python的self参数和__init__(self)方法,所以不对Java的相关知识做介绍,这里只给出对应关系。
Python | Java | 代表含义 |
---|---|---|
self | this | 指当前被调用的对象 |
__init__(self) | Stu构造函数 | 指构造函数,在实例化时,会自动被调用 |