文章目录
一、self
的作用
self
指的是调用该函数的对象(是一个实例)。Python中self等价于Java中的this。
首先明确的是self
只有在类中的方法中才会有,独立的函数或方法是不必带有self的。
例如:
# 定义方法
def showTime(name):
print(f'大家好我是{name},多多关照!')
# 调用方法
showTime('齐天大圣')
"""
输出结果:
大家好我是齐天大圣,多多关照!
"""
二、self
的使用注意事项
1、self
代表类的实例,而非类。
# self代表类的实例,而非类
class TestDemo():
# 可将self理解为实例td
def testFn(self):
print(f"谁调用我我就是谁,此时调用我的是{self}")
# 实例调用__class__属性时会指向该实例对应的类
print(f"我是按照{self.__class__}创建出来的")
# td为TestDemo的实例
td = TestDemo()
# 在类中方法的形参中,self参数一定要定义,但是在调用时会自动传入。
td.testFn()
执行结果如下:
谁调用我我就是谁,此时调用我的是<__main__.TestDemo object at 0x00000000028836C8>
我是按照<class '__main__.TestDemo'>创建出来的
说明:
<__main__.TestDemo object at 0x00000000028836C8>
表示:
self
是一个TestDemo
类型的object(对象),对象在内存的地址为0x00000000028836C8
。
为什么self指的是类的实例对象,而不是类本身。
如果self指向类本身,那么当一个类有多个实例对象时,self指向哪一个呢?
2、self不必非写成self,只是一种规范。
有很多人先学习别的语言,如Java,然后再学习Python的,所以总觉得self怪怪的,想写成this,可以吗?
当然可以,换成任何标识符都可以,把上面的代码改写一下。
# self代表类的实例,而非类
class TestDemo():
# 可将self理解为实例td
def testFn(this):
print(f"谁调用我我就是谁,此时调用我的是{this}")
# 实例调用__class__属性时会指向该实例对应的类
print(f"我是按照{this.__class__}创建出来的")
# td为TestDemo的实例
td = TestDemo(