• Python面试高频问题:self到底是什么


    1999f580de494977821cce312fc17315.png

    Python面试中,如果想考核面试者对面向对象的理解,我会问这样一个问题,请你谈一谈对self的理解?

    self 这个很常见,我们定义一个python类的方法时,第一个参数就是self,代码如下:

    1. class MyDemo:
    2. def test_self(self):
    3.         pass

    那么我们真的理解了什么是self吗?我相信有好多同学,就是简单地记住了:这是python中定义类方法的一个固定写法,有self的就是类方法,没有self的就是函数!的确,这是python中最基础的方法和函数的区别。那么self的本质又是什么呢,其实他就是类的实例化对象!也就是说谁在用某个方法,self指的就是它。

    我们看下面的例子

    1. class MyClass:
    2. def test_self(self):
    3. print(self)
    4. print("----------第一个实例----------")
    5. my=MyClass()
    6. print(my)
    7. my.test_self()
    8. print("----------第二个实例----------")
    9. my1=MyClass()
    10. print(my)
    11. print(my1)

    输出:

    <__main__.MyClass object at 0x00000066AF550448>

    <__main__.MyClass object at 0x00000066AF550448>

    ----------第二个实例----------

    <__main__.MyClass object at 0x00000066AF550448>

    <__main__.MyClass object at 0x00000066AF550388>

    从第二个实例的输出结果我们可以看到,我们一共实例化了两个实例,一个是<__main__.MyClass object at 0x00000066AF550448>,另一个是<__main__.MyClass object at 0x00000066AF550388>

    继续分析我们可以看到第一个实例中,实例化的my 和方法test_self(self) 中的self的值其实是一样的!

    因此我们可以得出结论:self就是实例化的对象!

  • 相关阅读:
    Web前端:Django和Angular——终极比较和差异
    ERP系统有哪些优点和缺点?
    DERT:End-to-End Object Detection with Transformers
    MySQL 详解 存储过程 和 存储函数
    ClickHouse—入门
    计算机毕设(附源码)JAVA-SSM基于疫情的智慧社区管理系统
    Redux 源码解析
    会议论文分析-CCS21-ML增强的符号执行方法
    关于vector的迭代器失效
    这个职业堕落的人
  • 原文地址:https://blog.csdn.net/liwenxiang629/article/details/125422117