zoukankan      html  css  js  c++  java
  • Python中的self通俗理解(自己理解的,自我感觉比官网解释要容易懂)

    在Python开发中,我们常常需要在类中加上self或者pycharm工具在类中定义方法的时候就自动帮你加上了self,这是为啥呢?

    起初我也不是特别明白,不停的查资料,后来想了想,这种解释感觉也行得通,所以就想写下来,难免以后会忘记;

    self,网上标准化的解释是表示类的实例,其实这个还是好理解的,只是后来又说了一大堆啥不是代表类,代表this,继承的时候能不能写等等,我就乱了,然后自己总结了一下;

    总结如下:

      1 因为Python是解释性语言,而我们所说的Java和C都是编译性语言,所以各语言的特点不一样,所以也会有区别;首先来说一下和Java中this的区别,在我看来,self和this在用法是确实是一致的,都是表示这个类,但是有区别,举个例子,在一个方法中,使用self和this是不一样的,在Python方法中加入self,因为Python是解释性语言,代码是从上往下是一行行执行的,所以在执行的时候,这个方法并不知道它是属于哪一个类的(换句话讲是它只是类中的一个方法,但是它并不是知道它是属于哪个类),所以加入self其实是告诉这个方法我是哪个类中的方法,所以要先用self,告诉这个方法,让它知道它调用的是那一个类;而Java不一样,对于编译性语言来讲,class类中不管是变量还是方法,全都是一次性打包完成的,所以就Java中的方法其实是知道它是属于哪一个类的,这也是为啥在Java类中的方法不需要直接在第一个参数中写this的原因;

    代码解释:

    class st(object):
        def __init__(self , name ,age):
            self.name = name
            self.age = age
        def na(self):
            print(self)
            print(self.age , self.name)
        def ag():
            print('dsdsds')
            
    
    if __name__ == '__main__':
        t = st('caizhou'  , 23)
        t.na()
        st.ag()

    结果:

     这里ag方法报错了,但是能输出结果,是不是很说明问题了?

    Java就不写了,感觉到这里也基本上证实了我的猜想了!这是第一点,也是最重要的一点;

      2 至于说继承,大概说一下吧,继承的时候就是如果是子类调用父类的方法,只要是实例化了子类的对象,self统统都是实例化的子类的self,就算是调用父类的方法,self也是子类的实例化对象;

    代码解释:

    class Pa:
        def pprt(self):
            print(self)
    class Ch(Pa):
        def cprt(self):
            print(self)
    
    c = Ch()
    c.cprt()
    c.pprt()
    p = Pa()
    p.pprt()

    应该写的比较明白了,我感觉self的用途就这些了,只需要记住啥时候用self,啥时候不用就行了

    结果:

     到这里就讲完了,以后想到啥了再补充,多指正,再见!!!!!

    祈福@点亮希望
  • 相关阅读:
    【设计总结】粤省事
    【设计】如何准备自己的作品集
    【设计】体系化设计思路
    【ML】京东人工智能设计神器「羚珑」
    【sqlalchemy】
    php代码审计基础笔记
    让windows瞬间cpu满载到100的批处理
    获取当前 Windows 的安装序列号
    CVE-2013-3908 Internet Explorer打印预览功能可导致信息泄露
    U-Mail邮件服务系统任意文件上传+执行漏洞(runtime缺陷与验证绕过)
  • 原文地址:https://www.cnblogs.com/caizhou520/p/14618100.html
Copyright © 2011-2022 走看看