当前位置: 首页 > 图灵资讯 > 行业资讯> python self用法详解

python self用法详解

发布时间:2025-10-26 16:10:57

对于类体中定义的实例方法,Python 自动绑定方法的第一个参数(通常建议将该参数命名为 self),第一个参数总是指调用该方法的对象。第一个参数绑定的对象根据第一个参数的位置略有不同:

引用构造方法初始化的对象进行构造方法。

引用调用该方法的对象进行普通实例方法。

第一个实例方法(包括结构方法) self 参数会自动绑定,所以在调用普通实例法和结构法时,程序不需要为第一个参数传值。

self 参数(自动绑定的第一个参数)的功能是引用当前方法的调用器,如上述结构方法 self 将实例变量添加到对象中。此类的另一个实例方法或变量也可以在一个实例方法中访问。假设定义了一个 Dog 类,这个 Dog 对象的 run() 该方法需要调用它 jump() 此时可以通过方法 self 参数作为 jump() 调用方法的人。

该方法的第一个参数所代表的对象是不确定的,但其类型是确定的,即它只能代表当前类别的例子;只有当该方法被调用时,该方法的第一个参数才能代表该方法。

例如,定义如下 Dog 类:

classDog:
#定义jump()方法
defjump(self):
print("jump方法正在实施中")
#定义run()方法,run()方法需要使用jump()方法
defrun(self):
#使用self参数引用调用run()方法的对象
self.jump()
print("run方法正在实施中")

上面代码的 run() 方法中的 self 代表该方法的调用者:谁在调用? run() 方法,那么 self 代表谁?所以这种方法说:当一个 Dog 对象调用 run() 方法时,run() 方法需要依靠自己的方法 jump() 方法。

当 Python 当对象的一种方法调用另一种方法时,不能省略 self。也就是说,上面的 run()将方法改为以下形式是不正确的:

#定义run()方法,run()方法需要使用jump()方法
defrun():
#省略self,以下代码会报错
self.jump()
print("run方法正在实施中")

另外,在结构方法中,self 参数(第一个参数)代表构造方法初始化的对象。例如,代码如下:

classInConstructor:
def__init__(self):
#foo变量(局部变量)在构造方法中定义
foo=0
#使用self代表构造方法初始化的对象
#下面的代码将将构建方法初始化对象的foo实例变量设置为6
self.foo=6
#使用Inconstructor创建的所有对象的foo实例变量将被设置为6
print(InConstructor().foo)#输出6

在 InConstructor 在结构方法中,self 参数总是引用构造方法初始化的对象。初始化将在程序中实施 InConstructor 对象的 foo 实例变量设为 6.这意味着构造方法返回的所有对象 foo 实例变量等于 6。

需要注意的是,自动绑定 self 无论是方法调用还是函数调用,参数都不依赖于具体的调用方式,self 可自动绑定参数。例如,以下程序:

classUser:
deftest(self):
print('self参数:',self)

u=User()
#以方法形式调用test()方法
u.test()#<__main__.Userobjectat0000000000002F824>
#将User对象的test方法赋值foo变量
foo=u.test
#test()方法通过foo变量(函数形式)调用。
foo()#<__main__.Userobjectat0000000000002F824>

在上述程序中排名第一 5 以方法形式调用行代码 User 对象的 test() 方法,当然,方法调用器会自动绑定方法的第一个参数(self 参数);程序中第 11 以函数的形式调用行代码 User 对象的 test() 该方法此时似乎没有调用器,但该程序仍将实际调用器绑定到该方法的第一个参数中,因此输出结果完全相同。

当 self 当参数作为对象的默认引用时,程序可以像访问普通变量一样访问此参数 self 甚至可以使用参数 self 参数作为实例方法的返回值。查看以下程序:

classReturnSelf:
defgrow(self):
ifhasattr(self,'age'):
self.age+=1
else:
self.age=1
#returnself返回调用该方法的对象
returnself
rs=ReturnSelf()
#同样的方法可以连续调用
rs.grow().grow().grow()
print("rsage属性值为:",rs.age)

从上述程序中可以看出,如果在某种方法中使用它 self 作为返回值,参数可以多次连续调用相同的方法,使代码更加简洁。但这种把手 self 参数作为返回值的方法可能会导致实际意义的模糊,例如上述方法 grow 该方法用于表示对象的生长,即 age 属性的值加 1.实际上不应该有返回值。

相关文章

python self用法详解

python self用法详解

2025-10-26
Python之math模块常用方法汇总

Python之math模块常用方法汇总

2025-10-26
Python之json模块和pickle模块详解

Python之json模块和pickle模块详解

2025-10-26
python线程中的semaphore信号量是什么

python线程中的semaphore信号量是什么

2025-10-26
Python reversed函数及用法

Python reversed函数及用法

2025-10-26
Python截取字符串(字符串切片)方法详解

Python截取字符串(字符串切片)方法详解

2025-10-26