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) |
总结
|
python中的__new__概念(工厂相关推荐
- python中变量,python中变量的概念
python中变量的概念 在python中,变量就是一种标识符, 它是数据的名字,更专业的理解,变量是内存中数据的引用, 编程语言里的变量和初中学习代数时的方程变量很相似. 前面学习数字类型,bool ...
- python中的__new__与__init__,新式类和经典类(2.x)
在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...
- python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...
__new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是sel ...
- 简述python中面向对象的概念_简述Python中的面向对象编程的概念
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- python中的__new__和__init__
一.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候. 这样便是__init ...
- python中对象的概念是什么_简述Python中的面向对象编程的概念
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- Python中的__new__()方法的使用
__new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known cas ...
- python中对象的概念是什么_python面向对象编程的基本概念
作者|HIMANSHI SINGH 编译|VK 来源|Analytics Vidhya 介绍 在学习面向对象编程时,我决定深入研究它的历史,结果发现它很迷人.术语"面向对象编程"( ...
- Haskell与Python中的一些概念,若有所悟
转自:http://blog.csdn.net/tangboyun/archive/2010/04/03/5447688.aspx 首先,必须声明的是,下面所写的内容,只是我个人的一些体验和感悟,受限 ...
最新文章
- ldap 统一认证 java_如何在你的系统里集成LDAP统一认证
- thinkphp5 使用PHPExcel 导入导出
- 【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
- 密码篇——对称加密—AES
- python手机号码正确编程_python 小练习之生成手机号码
- python解密_Python解密
- Java中gatSum方法是什么_Oracle中的SUM用法讲解
- java invoke int long,将Long转换为Integer
- 机器学习- 吴恩达Andrew Ng Week9 知识总结 Anomaly Detection
- 自己动手破解斯凯Mrp游戏
- Linux下服务器基本环境搭建步骤详解(三种软件安装方式)
- 百度地图样式冲突问题
- 暴力计算一元二次方程的求解方法
- DBUS介绍与Linux C实例
- 【项目小tips】scoped属性的使用
- 陈勇写的滚动条类及使用举例
- adas记录仪app_免费用的ADAS 极目启行APP道路测试
- 【numpy_financial金融函数-复现复利威力】
- 全球及中国风力发电行业运维模式及十四五投资策略研究报告2021-2027年
- 查找数组中的重复元素
热门文章
- 项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)
- Java微信公众平台获取签名
- [JZOJ P1288] [DP]矩阵取数
- [转]html超链接打开的窗口大小
- 【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32
- 迪美特TVZ8双核智能高清播放器 在电视上编程不是梦
- UDT源码剖析(二):UDT自带例程recvfile注释
- 首个开源 Linux 系统登陆火星,占有率超 Windows,一同登录还有一款安卓手机芯片...
- printf 宏 调试技巧
- python快递代取系统_代取快递的变现方式,校园跑腿的经营范围有多大?