python中的__new__概念(工厂

__new__方法实际上在__init__方法之前执行,用于创建类的实例。然而__init__方法负责实例创建后对其进行自定义,__new__方法才是实际上创建并返回实例的方法。

__new__方法的第一个也是最重要的参数是创建实例所需的要的类(按照惯例,命名为cls)。

在大多数起概况下,__new__方法的其他参数会被完整复制到__init__方法中。参数在调用类构造函数时首先会被传递给__new__方法,然后再传递给__init__方法。

在实际应用中,大多数类无需定义__new__方法。该方法在python中的内置实现已经足够。

通常,我们希望__new__方法返回一个已经被初始化后的类的实例。在某些情况下,并不需要这么做。需要注意的是,只有在通过__new__方法返回当前类的实例时才会执行__init__方法。如果返回的不是当前类的实例,就不会调用__init__方法。

 

class MyClass(object):

    def __new__(cls,a):

        print("__new__  被调用,参数为:%d"%a)

        #在实现__new__方法的时候,应该首先调用父类的__new__方法

        #然后再开始自定义的逻辑

        #调用父类__new__方法创建实例,并返回

        return object.__new__(cls)

 

    def __init__(self,a):

        print("__init__ 被调用,参数为:%d"%a)

 

 

#解释器先将参数100传递给__new__方法

#如果__new__方法创建对象,那么会调用__init__方法

#这时会将参数100再传递给__init__方法

mclass = MyClass(100)

 

总结

    • __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供;
    • __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例;
    • __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值;
    • 我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 723. 粉碎糖果(模拟)

文章目录1. 题目2. 解题1. 题目 这个问题是实现一个简单的消除算法。 给定一个二维整数数组 board 代表糖果所在的方格,不同的正整数 board[i][j] 代表不同种类的糖果,如果 board[i][j] 0 代表 (i, j) 这个位置是空的。 给定的方格是玩家移动后的游戏…

css动画放大延迟,css3延时动画

不太理解属性都是什么意思,但是有动画效果,我也是惊呆了#animated_div{animation:animated_div 4s 1;-moz-animation:animated_div 4s 1;-webkit-animation:animated_div 4s 1;-o-animation:animated_div 4s 1; width:800px; height:500px; position:rel…

Hibernate 异常org.hibernate.LazyInitializationException: could not initialize proxy - no Session

最近代写毕业设计中小网站,SSH架构,三年没搞过这个,忘记了,今天遇到这个问题就记录下: 错误页面提示 could not initialize proxy - no Session 控制台 org.hibernate.LazyInitializationException: could not initial…

python中的异常

异常处理就是处理程序中的错误。谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在等等)。 在python中提供专门用于处理程序中错误的一种机制,异常机制&#…

css3案例分析,CSS3动画/动画库以及案例分析(上)

在这html5遍天下的年代,越来越多的网页也用到了css3的动画效果,这让原本我们静态的页面有了更多的活力。最近也一直在做这方面的页面,有些小小的心得,和诸位分享下。CSS3的动画绝对是很赞的,不仅支持PC还支持移动端&am…

python中获取异常描述与else用法

获取异常描述 异常本身是一个对象,所携带了关于错误的比较详细描述,如何获取异常详细描述信息呢? try: f open("log.txt","r") a 10 b 0 ret a / b #捕获多个类型的异常 except IOError as ex: …

LeetCode 418. 屏幕可显示句子的数量(DP)*

文章目录1. 题目2. 解题1. 题目 给你一个 rows x cols 的屏幕和一个用 非空 的单词列表组成的句子,请你计算出给定句子可以在屏幕上完整显示的次数。 注意: 一个单词不能拆分成两行。 单词在句子中的顺序必须保持不变。 在一行中 的两个连续单词必须用…

网站服务器令牌获取,adobe - 获取Adobe Sign访问令牌以进行服务器到服务器身份验证 - 堆栈内存溢出...

_bananabread有正确的想法。 按照本网站上的步骤操作:直到您使用refresh_token获得JSON响应,这就是您所需要的。接下来,您需要制作刷新令牌请求,以便在每次需要使用它时刷新令牌,并返回一个全新的OAuth令牌。这是一个J…

try…finally与嵌套及自定义异常抛出

try...finally... try...finally...语句用来表达这样的情况:在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池…

LeetCode 568. 最大休假天数(DP)

文章目录1. 题目2. 解题1. 题目 力扣想让一个最优秀的员工在 N 个城市间旅行来收集算法问题。 但只工作不玩耍,聪明的孩子也会变傻,所以您可以在某些特定的城市和星期休假。 您的工作就是安排旅行使得最大化你可以休假的天数,但是您需要遵守…

安装数据库windows 安装redmine 详解

时间紧张,先记一笔,后续优化与完善。 近来公司有须要,要找一个项目管理工具,网上看了redmine还不错,终究项目经理选择了它,让我把平台给搭建起来并熟悉其中的功能。搭建的过程中超过了我的预计还破费了点工…

模块概念与使用及注意事项

1 模块概念 模块就是包含了python代码的文本文件,通俗讲,一个py文件就是一个模块。 2 使用模块(import) 比如,我们单独编写了一个模块,命名为mymodule.py,在该模块中我们定义一些函数和类,我们如何在test.…

魔兽世界转服务器显示完成,魔兽世界怀旧服:TAQ变简单了,为什么还是出现了AFK大潮?...

魔兽世界怀旧服在开服一年多以后,即将在2020年12月3日,迎来经典60年代的收官副本-第六阶段纳克萨玛斯大墓地(NAXX)。在差不多的时间段内,魔兽世界正式服也将上线全新的9.0版本-暗影国度。囧王者估计,在即将到来的12月份里面&#…

LeetCode 317. 离建筑物最近的距离(逆向BFS)*

文章目录1. 题目2. 解题2.1 正常思维BFS2.2 逆向思考BFS1. 题目 你是个房地产开发商,想要选择一片空地 建一栋大楼。 你想把这栋大楼够造在一个距离周边设施都比较方便的地方,通过调研,你希望从它出发能在 最短的距离和 内抵达周边全部的建筑…

Ubuntu 运行Asp.net MVC3

1 先通过SVN获取最新版的Asp.net MVC3代码 2 用Monodevelop打开后,进入Web项目的引用,删除标了红色的引用 3 添加引用“System.Web.Mvc.dll”和“System.Web.WebPages.Deployment.dll” 4 重新编译,然后删除Web项目的bin下的“Microsoft.Web.Infrastruct…

LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)

文章目录1. 题目2. 解题2.1 递归2.2 BFS1. 题目 设计一个算法,可以将 N 叉树编码为二叉树,并能将该二叉树解码为原 N 叉树。 一个 N 叉树是指每个节点都有不超过 N 个孩子节点的有根树。 类似地,一个二叉树是指每个节点都有不超过 2 个孩子节…

包概念与__init__注意事项

1.包的概念 为了组织好模块,将多个模块分为一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件。常见的包结构如下: package_a ├── __init__.py ├── module_a1.py └── module_a2.py package_b ├── _…

服务器上有涉密文件,涉密文件保密管理规定

为贯彻落实国家和省、市、区保密局对涉密文件资料管理工作的要求,进一步做好我办涉密文件资料管理,特制定本规定。一、涉密文件的拟制、印刷、传递、承办、借阅、保管、归档、移交和销毁,必须严格履行审批、清点、登记、签收等手续。二、涉密…

服务器文件同步管理

服务器文件同步管理 原文 http://www.cnblogs.com/yanxiaodi/archive/2011/03/21/2296462.html 前几天有台服务器电源坏了,还好数据没有丢。因此必须做好服务器文件内容的备份。服务器主要是用来提供网站服务,带着一个数据库,数据库可以用分发…

LeetCode 774. 最小化去加油站的最大距离(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], ..., stations[N-1] 的位置上,其中 N stations.length。 现在我们希望增加 K 个新的加油站&…