在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,啥时候不用就行了
结果:
到这里就讲完了,以后想到啥了再补充,多指正,再见!!!!!