最近在看小甲鱼的python视频,在讲到魔法方法__new__时,用了一段例子

class CapStr(str):

def __new__(cls, string):

string = string.upper()

return str.__new__(cls, string)

感觉不是很明白,查看很多例子加自己测试后作出如下结论:

首先要明确的是__new__方法一定要返回一个实例对象,所以这也就是为什么不能直接 return string 的原因,因为如果

直接return string,我们可以做个测试:

这里就有问题了,我们执行了 a = CapStr('i love china')之后,a不应该是个CapStr类型的对象吗,为什么type是‘str’呢,原因就是因为我们返回的是return string。所以 __new__方法一定要返回一个实例对象的,只有这样,才能执行后面的__init__方法。

那么还有一个问题,为什么要返回 return str.__new__(cls, string)呢,为什么要这么写呢?我查了网上有人说了这么一句话,只有调用父类的__new__方法,返回的才是当前类的实例对象,对此种说法我有点怀疑,并自己通过测试代码得到如下结论:

class A:

pass

class B:

def __new__(cls):

return A.__new__(cls)

代码中A和B没有任何的继承关系,那我们运行得出什么结论呢?如下图:

结果可知,c的类型仍然是B,所以感觉return 中返回的仅仅是借用某一个类(A)中的__new__方法实现了返回当前参数类型的实例对象而已,并不会在意是否是其父类、调用哪个类的__new__方法。

最后声明,__new__(cls)方法,需要的cls参数一定是当前的类,此处的cls可以是任何字符,返回的一定是个实例对象,才会执行后面的__init__方法。

原文链接:https://blog.csdn.net/qq_35850405/article/details/105443691

python cls方法_Python 中的 __new__(cls)方法详解相关推荐

  1. python xlrd课程_python中xlrd模块的使用详解

    一.xlrd的安装 打开cmd输入pip install xlrd安装完成即可 二.xlrd模块的使用 下面以这个工作簿为例 1.导入模块 import xlrd 2.打开工作薄 # filename ...

  2. python中readlines方法_Python中read(),readline(),readlines()使用详解

    # python3.7 1.read()会读取文件的全部内容,read(size)方法,每次最多读取size个字节的内容,返回字符串. #a.txt  第一行为abc #a.txt  第二行为a12 ...

  3. python zipfile教程_Python中的zipfile模块使用详解

    zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compre ...

  4. python map用法_Python中 map()函数的用法详解

    python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...

  5. python zipfile模块_Python中的zipfile模块使用详解

    zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compre ...

  6. python itertools卡死_python中的itertools的使用详解

    今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿

  7. python函数实例化_Python中的__new__()方法与实例化

    __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__()负责将类的实例化,而在__init__()启动之前 ...

  8. python编程字典100例_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

  9. python迭代器创建序列_Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的 ...

  10. python编程midi键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

最新文章

  1. java git subtree_Git subtree使用
  2. 分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测
  3. MMKV集成与原理,轻松拿下offer
  4. nodejs web应用服务器搭建(一):跑起你的服务器
  5. 恒大健康上半年营收同比增132% 新能源汽车将成新增长点
  6. arm linux samba,嵌入式linux系统教你制作samba服务器
  7. Java实现分页功能常见的几种方法
  8. 阿里巴巴矢量图标库使用
  9. 宿舍管理系统【C语言建工程及多文件练习】
  10. WinRAR 去除广告弹窗,简单4步亲测有效!
  11. 系统同步网络时间服务器不可用,电脑时间同步出错 RPC服务器不可用解决方案...
  12. Vue笔记 (一) Vue的MVVM
  13. 拉钩招聘信息爬取以及可视化
  14. 在matlabnbsp;画箭头
  15. js 将一大段时间均分为很多个小时间段
  16. 男人典范-《万历十五年》的启示
  17. python中raw是什么意思_对于Python中RawString的理解
  18. 解密超高频RFID读写器的工作原理
  19. 爱上狼的羊和爱上羊的狼
  20. ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.xxx' (111)

热门文章

  1. 计算机上显示找不到无线网络连接,笔记本没有无线网络连接怎么办 解决方法介绍【图解】...
  2. 教你自己如何在Windows10系统创建虚拟专用网络
  3. dom影像图形成数字地形图_DOM卫星影像
  4. BoomBeach海水效果实现
  5. 研究生师兄谈SCI论文写作心得
  6. 【Course 2 改善深度神经网络】Week 1 深度学习的实用层面
  7. Anaconda Prompt :python.exe - 无法找到入口,无法定位程序输入点
  8. Day9 Four French Words Pronounced Differently in English
  9. 基础SQL第无课---数据修改
  10. bzoj 4816 数字表格 —— 反演