在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()

结果:

java self区别 this和python java this python self_Java

 

 这里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,啥时候不用就行了

结果:

java self区别 this和python java this python self_子类_02

 

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

 

祈福@点亮希望