Python self详解

Python self详解教程

使用 Python 编写 时,类中的 构造函数、实例函数和 类函数 的第一个 参数 都是 self。

在 Python 中 self 并不是 关键字,因此 self 名称不是必须的,,我们也可以将 self 名称换成 a 或 b 或其它名字都可以,但是约定成俗,一般都是使用 self。

self 只有在类的方法中才会有,独立的 函数 或方法是不必带有 self 的,且 self 参数在调用时不必传入相应的参数。

Python self作用

描述

在 Python 中,调用类方法时,self 指的就是类 实例对象 的本身。

语法

class People: money = 10000 def func_name(self, params): pass p = People() p.func_name(params)

说明

我们定义了一个 Person 类,Person 类中有一个实例方法 func_name,func_name 的第一个参数就是 self,也可以换成其他名字。

接着,我们创建了一个 Person 类的实例 p,并且使用 p 调用了实例方法 func_name,此时 func_name 中的 self 就是这里的 p。

且,调用 func_name 方法时,第一个 self 参数不需要我们显式的进行传入,我们只需要传入除了 self 之外的参数即可。

案例

self参数不必显式传入

类方法中的 self 参数不必显式传入

print("嗨客网(www.haicoder.net)") class Student: def __init__(self, name): self.name = name def learn(self, course): print("I am Learn", course) def eat(self, food): print("I am eat", food) stu = Student("William") stu.learn("Python") stu.eat("Apple")

程序运行后,控制台输出如下:

35_python self.png

我们创建了一个类 Student,接着,为该类添加了三个方法,其中一个构造方法 __init__,还有两个实例方法,分别为 learneat,这三个方法的第一个参数都是 self。

最后,我们创建了一个类 Student 的实例 stu,并分别使用实例 stu 调用实例方法 learneat,我们看到,learneat 的第一个 self 参数不需要我们显示的传入。

learneat 中的 self 此时指的就是 stu 这个实例。

self参数名可以任意指定

类方法中的 self 参数名可以任意指定

print("嗨客网(www.haicoder.net)") class Student: def __init__(my, name): my.name = name def learn(my, course): print("I am Learn", course) def eat(my, food): print("I am eat", food) stu = Student("William") stu.learn("Python") stu.eat("Apple")

程序运行后,控制台输出如下:

36_python self.png

我们将 self 的名字全部换成了 my,最终程序的执行结果与上面的一模一样,即 self 的名字可以任意的修改,但不推荐这么做。

self还可以做函数参数

self 还可以做函数返回值,进行返回

print("嗨客网(www.haicoder.net)") class Student: def incry(self): if hasattr(self, 'score'): self.score += 1 else: self.score = 1 return self stu = Student() stu.incry().incry().incry() print("Score =", stu.score) stu.incry().incry().incry() print("Score =", stu.score)

程序运行后,控制台输出如下:

37_python self.png

我们定义了一个类 Student,并且在类 Student 里面定义了一个实例函数 incry,incry 函数同时也返回了 self 参数。

最后,我们可以不停的调用 incry 函数,实现给调用对象 stu 的 score 属性不停的增长。

Python self详解总结

使用 Python 编写类时,类中的构造函数、实例函数和类函数的第一个参数都是 self。

在 Python 中 self 并不是关键字,因此 self 名称不是必须的,,我们也可以将 self 名称换成 a 或 b 或其它名字都可以,但是约定成俗,一般都是使用 self。

self 只有在类的方法中才会有,独立的函数或方法是不必带有 self 的,且 self 参数在调用时不必传入相应的参数。