面向对象 self 原理

一、 这个网址记录了关于类中的一些内置的方法,详细讲了这些方法的用处。

https://www.oschina.net/question/253614_115412

关于self ,有三个疑问,第一个,self ,到底是什么?

基于各种网站去搜索,你会发现所有人都告诉你,这个self ,就是对象本什么,其实这种说法是有问题的,首先,我们知道,创建一个类,内存中会开辟出一块空间,用来存储,类中的属性和方法,而在根据当前类,创建一个对象时,会另外开辟出一块内存空间,

用来存储对象,和对象属性。

如图所示。我们看到,类中的方法,是存储在类的内存空间的,所以可以直接用,class.func(self),这个时候去判断,这个func里面的参数是可以随便传的,都可以调用到这个func方法。所以,当类调用方法时,这个self,只是一个形参,

但是当我们通过对象调用的时候,我们字在判断,发现这个self才是一个对象,当前的这个self,是和调用这个方法的实例是同一个东西。

第二个 ,为什么类中的方法一定要传入self

这个问题困扰了我很久,网上搜索了很多文章,大概讲的就是self就是一个对象本身,这些不是本质的东西。以下是个人的一些理解,还是根据上述例子,当一个实例,在调用类的属性或者方法时,,会根据类对象指针,找到class,

然后在通过类,找到其中的方法和属性。其实我自己认为,这个是python内部做的一个强制的参数, 因为在对象调用的方法中,不排除,会调用到对象属性,而对象属性又是和object绑定的,这样默认传进来,如果用到,正好,通过self,来进行调用,

如果不用,就默认放在那里。

第三个, 构造方法中,为什么填充对象属性时,前面也要跟一个self。

这个就比较好理解,因为__init__ 方法下的对象属性,是存放在对象空间的,self.attr = value ,这种就相当于一个封装了。

猜你喜欢

转载自www.cnblogs.com/python-ERIC/p/10396975.html
今日推荐