Python自学25——第十二章(2):特殊方法与特殊属性,变量的赋值操作,深拷贝,浅拷贝,本章总结(本章开始难度上升!!)

目录

一、特殊方法和特殊属性

1、特殊属性

2、特殊方法

(1)__add__()方法

(2)__len__()方法

(3)__new__()方法

二、变量的赋值操作以及浅拷贝、深拷贝

1、变量的赋值

2、浅拷贝

3、深拷贝

第十二章总结


一、特殊方法和特殊属性

特殊属性和特征方法的特征是“__XXX__...”他们都是由两个下换线开始,由两个下划线结束的。由下图所示:

1、特殊属性

一些特殊属性的作用可以从下图中看见:

2、特殊方法

(1)__add__()方法

当我们想让两个数进行加法操作时,可以进行4、5、6、9行的操作就能得出结果,可殊不知Python背后其实是使用了一种特殊方法进行的加法,那就是__add__(),我们可以看到只进行7和10行的话也是可以计算出两个数的加法结果的。

那么如果我想使用类型对象执行字符加法(拼接)操作呢?

我想让两个对象具有相加的能力的话,必须有下图所示的操作:

8,9行的操作是必须要有的,如果没有这两行的操作的话,12,13,14行的操作都会报错的。

(2)__len__()方法

Len本身是一个内置函数,当我们有一个列表的时候,我们想要计算它的长度,可以使用len函数,如上图第二行所示。当然也可以调用__len__这个特殊方法来计算列表的长度,如上图第三行所示。

假如我想对对象进行求长度操作时,直接使用__len__()方法是会报错的,因为我们没有编这个方法。因此需要对这个方法进行编辑:

10行11行就是对这个方法的编辑,其中11行的len是内置函数,调用内置函数来获取self.name的长度。然后定义了这个方法后,18.19行的操作才能顺利输出对象的长度。

(3)__new__()方法

用于创建对象。

比如下图所示的代码:

Person类中有两个方法,第一个是__new__()方法在前,它的作用是创建新的对象;第二个是__init__()方法在后,它的作用是为这个创建的对象初始化属性。执行的过程如下图所示:

程序要从上往下进行,于是从第15行开始,先输出了父类的ID,然后再输出子类Person的ID。之后进入第18行,18行的操作是创建了一个对象,这个对象不是单纯创建的,而是需要通过Person类里面的方法来进行创建,于是代码来到了第6行,创建对象的类型person传给了cls,之后调用了object中的__new__()创建了新的对象obj。然后这个obj(创建好的对象)返回给了11行的self,当初始化完毕后才把self赋给了p1。因此我们能发现,obj,self,p1的ID都是1056都是一样的。

二、变量的赋值操作以及浅拷贝、深拷贝

1、变量的赋值

只是形成两个变量,实际上还是指向同一个对象。

上图就是一个赋值操作,cpu1是CPU类的一个对象,然后将cpu1赋给了cpu2,这样一来,无论是输出cpu1还是cpu2都一样。地址也一样。内存访问如下图:

2、浅拷贝

上图红色框里的就是浅拷贝,拷贝后我们发现computer和computer2是不同的对象,但是他们包含的子对象cpu和disk是相同(唯一)的。

内存访问示意图如下:

如上图所示,浅拷贝是将绿圈部分(Computer的实例对象)(绿框所示)给拷贝过来了,但是其中的子对象(cpu,disk)并不拷贝,他们仍然指着同一个位置(蓝框所示)。

3、深拷贝

上图红色框里的就是深拷贝,拷贝后我们发现computer和computer3是不同的对象,并且他们包含的子对象cpu和disk也是不相同的。深拷贝与浅拷贝在语法方面的区别在于浅拷贝是copy,深拷贝是deepcopy.

内存访问示意图如下:

如上图所示,深拷贝是Computer的实例对象给拷贝过来了,并且其中的子对象(cpu,disk)也拷贝了,包括他们的内存地址也指向了全新的位置。

第十二章总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wo~he!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值