Python 中 self 关键字的作用?

题目描述

Python 中的self 表示类的实例,想知道 Python self 关键字的作用,以及这样有什么好处?

题目来源及自己的思路

每次写类方法时,都会默认第一个参数为 self,否则就会报错,比如下面的代码:

class MyClass:
    def myFunc(self, name):
        self.name = name
        print(name)


class MyClass2:
    def myFunc(name):
        print(name)

相关代码

class MyClass:
    def myFunc(self, name):
        self.name = name
        print(name)


class MyClass2:
    def myFunc(name):
        # name = name
        print(name)


if __name__ == '__main__':
    myClass = MyClass()
    myClass.myFunc('test1')
    myClass2 = MyClass2()
    myClass2.myFunc('test2')

直接执行会得到如下错误:

test1
Traceback (most recent call last):
  File "XXX\self_q.py", line 17, in <module>
    myClass2.myFunc('test2')
TypeError: MyClass2.myFunc() takes 1 positional argument but 2 were given

请教大佬们: Python 中 self 的作用是什么呢,?

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
阅读 1.9k
3 个回答

正如你所说 self 表示类的实例

在一个class下面写的函数,默认情况下都是属于实例函数,也就是没办法使用Class.func()这种方式去调用的。也就是这个方法是属于实例的,需要由Class().func()这种去调用。

MyClass2中,def myFunc(name):中的name其实跟def myFunc(self, name)中的self是相同作用的。

他就是这种约定。

实例方法相对于的还有静态方法,其实就是给类方法,加个@staticmethod装饰器。

class MyClass2:
    @staticmethod
    def myFunc(name):
        # name = name
        print(name)

# 调用
myClass2 = MyClass2()
myClass2.myFunc('test2')
MyClass2.myFunc('33')

这种表示,这个函数跟具体的实例无关。也就不用再传递self进来了。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

简单的来说,self 就是指当前类,比如类有两个方法AB,他们此时是相互依赖的,比如A里面需要调用B,此时 self 就有用了,常见的应用场景就是,你不可能所有逻辑都在A中写,比如你下载一个文件的时候,A可能只是选择下载哪个文件,B中才是真正开始下载这个文件的逻辑

这么解释相信你立马会懂

class Test:
    def A(self):
        print(self.B())
        
    def B(self):
        return '我是B'
    
if __name__ == '__main__':
    (Test()).A()
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

如果你知道java或者javascript中的this,那么self的作用和他们是一样的

self 用于表示类的实例对象。所以在类中定义方法时,第一个参数通常被命名为 self,用于表示该方法的调用者(即类的实例对象本身)。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题