python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

论坛 期权论坛     
选择匿名的用户   2021-5-22 14:48   251   0
<div style="font-size:16px;">
<p align="center"><img alt="" src=""></p>
<p>python无处不对象的深刻理解</p>
<p align="center">前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质。只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对吧,但是仔细想想有何不可呢?一个类定义完了就是一个对象啊,我当然是可以改变一个对象的属性,只要语法结构合乎python的习惯,我们下面就是把方法当作普通函数去调用,只是因为它是类定义里的函数,所以前面加上a.b(a),这个.就是python的一种规定,或者说开发人员的源代码就是这么写的,其它的和一般的函数调用没有什么区别。大家不要学死了,python无处不对象,一定要记住这句话。<img alt="" src="">t</p>
<p align="center">实例化对象的绑定方法的调用只是有一种简便书写格式而已,以下图为例,a1.b()其实相当于从a1.__class__.__mro__里面去找b方法,并且把a1作为参数传递给方法。<img alt="" src=""></p>
<p align="center">我们甚至还可以这么写,我用通用写法b.c(a1),都是没有问题的,其实self只是个形式参数而已,你可以用任何合法字符,写成self算是一种规定吧。结合上面理解一下,下面还会讲这个问题<img alt="" src=""></p>
<p>继承的本质</p>
<p align="center">前面我们曾经说过继承,都是各种覆盖啊,什么东西,下面我会以一种可视化的方法,一种更为简单的方法让你来理解继承。我相信会对你有帮助的<img alt="" src=""></p>
<p align="center"><img alt="" src=""></p>
<p align="center">其实访问d1.n就相当于下面的代码<img alt="" src=""></p>
<p align="center">所以说继承的本质是什么?拿上面例子来说,其实就是新建一个d1.__class__.__mro__列表,访问实例化对象的属性的时候python会先在d1.__dict__找,然后在这个MRO列表里依次寻找.__dict__有没有你要找的属性,没有报错,有的话就返回第一个找到的属性。所以现在可以把头脑里那些什么各种继承的属性标签的覆盖都忘了,就按照这个顺序来找,我们就再来说说这个__dict__,它其实就是一个字典存放与你这个对象相关的一些东西,对象是类对象的话就是类定义里定义的属性和方法,如果是实例化对象就是绑定属性,实力化对象是没有方法的,方法都是归属于类的,这个前面也说过,我们就再用这个__dict__去理解一下属性和方法覆盖的问题,注意看下面__dict__的不同<img alt="" src=""></p>
<p align="center">我们用__dict__来理解继承的机制<img alt="" src=""></p>
<p align="center">b继承了a其实相当于什么?我的理解是b继承a其实就像我们在b网站上有一个a网站的链接,我们就把__dict__理解为网页上的内容,b网站可以有和a网站上一样的板块,比如说python版块,但是如果我们在b网站上没有找到我们想要的版块(这是可能的吧),这时候就体现了继承,我们点开b网站里a网站的链接去到a网站去看有没有,如果还没有就继续点链接,__mro__其实就是链接的一个顺序,当然我们这里假设每一个网站只能有一个链接向其它的网站,假设b网站没有python版块,我们就要点开链接去a网站看有没有,如果有我们实际上是在a网站看的python。如果b网站原来有c语言版块,我们每天都在b网站看,某一天突然这个版块被删了,那么我们就只能点开链接去a网站看了,a没有就继续点开链接。我们再来理解一下实例化的过程,其实实例化是什么呢?前面说过类就是图纸,类的实例化就是照着图纸去盖房子,现在我们要说了这个房子其实是个假房子,为什么这么说呢?就看下面的例子,因为a1作为a的实例化对象以后,a1.__dict__是空的,但是为什么访问a1.n返回了1也就是a.n呢?其实这个上面已经讲过,就是按照__dict__和__mro__的一个顺序去搜索,这里我找不到很好的比喻。我们只有发生了赋值行为,就相当于进行了装修,__dict__里才会有内容,绑定方法其实就是这么一种赋值行为。当然python里的赋值和c语言的赋值含义是不一样的,学python的有时候会说这么一句话,python没有变量只有名字,关于这部分内容前面已经介绍过不少了,包括浅拷贝和深拷贝的内容,不熟悉的请去前面看。<img alt="" src=""></p>
<p align="center">不知道你们还记得不记得前面提到过一个静态变量,回顾一下<img alt="" src=""></p>
<p align="center">为什么
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP