-
python3教程之Python 中__new__方法详解及使用
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/python.html
试听地址 https://www.xin3721.com/eschool/python.html
__new__ 的作用
在Python中__new__方法与__init__方法类似,但是如果两个都存在那么__new__闲执行。
在基础类object中,__new__被定义成了一个静态方法,并且需要传递一个参数cls。Cls表示需要实例化的类,此参数在实例化时由Python解析器自动提供。
new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决定是否要使用该init()方法,因为new()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例。
new()方法的特性:
new()方法是在类准备将自身实例化时调用。
new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。
实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Person( object ): def __init__( self , name, age): self .name = name self .age = age def __new__( cls , name, age): if 0 < age < 150 : return object .__new__( cls ) # return super(Person, cls).__new__(cls) else : return None def __str__( self ): return '{0}({1})' . format ( self .__class__.__name__, self .__dict__) print (Person( 'Tom' , 10 )) print (Person( 'Mike' , 200 )) |
结果:
1
2
|
Person({ 'age' : 10, 'name' : 'Tom' }) None |
Python3和 Python2中__new__使用不同
Python2的写法
注意 Python 版本大于等于2.7才支持
1
2
3
4
5
6
|
class Singleton( object ): def __new__( cls , * args, * * kwargs): if not hasattr ( cls , '_inst' ): print ( cls ) cls ._inst = super (Singleton, cls ).__new__( cls , * args, * * kwargs) return cls ._inst |
栏目列表
最新更新
python数据库连接池技术总结
python数据库连接池技术总结
成人网站性能提升 20 倍之经验谈 [Python
python动态捕获异常
python 探测网站目录的GUI程序
python实现中文字符繁体和简体中文转换
Python服务器开发 -- 网络基础
python高性能编程方法一
使用python管理Cisco设备
python抓取google搜索结果
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
图解TCP数据报结构以及三次握手(非常详
TCP协议的粘包问题(数据的无边界性)
Excel数据导入到Sql server
SQL Server like 字段
SQL Server中的LEFT、RIGHT函数
sql server 安装出现需要sqlncli.msi文件,错误
SQL Server学习内容(一)
SQLServer执行大脚本文件时,提示“无法执
数据库敏捷版本控制之3个数据库策略
将select 转为json
SQL Server 创建索引(index)
GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及