__init__ __new__区别
请运行代码:
class A:
def __init__(self):
print "A.__init" def __new__(self):
print "A.__new" class B(object):
def __init__(self):
print "B.__init"
super(B, self).__init__() def __new__(cls):
print "B.__new__"
return super(B,cls).__new__(cls) a = A()
b = B()
print(type(a))
print(type(b))
运行结果
A.__init
B.__new__
B.__init
<type 'instance'>
<class '__main__.B'>
请注意: A无基类,B有基类并且__new__ 方法跟__init__两个方法有两点不同
1.self,cls参数不同,即 __new__为classmethod.
2.__new__有return。
这两个问题牵涉到概念New-style and classic classes。请参照https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes查看classic和new style clas,两者是如何出现的。
不管是new style或者classic都可以使用isinstance(obj, cls)做判断。
因为a虽然现实type 'instance'。但是查看a.__class__仍然可以看到a的类型。
__init__ __new__区别的更多相关文章
- Python基础(十) __init__与__new__区别
		__init__与__new__区别: __init__在python,其实是,在实例化之后执行的,用来初始化一些属性,相当于构造函数,但是又不一样 细心一些,通过参数会有所发现,其实__init__ ... 
- Python 中的__new__和__init__的区别
		[同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ... 
- Python-__init__ 和 __new__区别和原理
		__init__ 和 __new__区别 1. 从传递参数角度看,__init__第一个参数是实例本身, __new__传递的是类本身 2. 从执行顺序角度看,__new__方法执行在 __init_ ... 
- 【转】python类中super()和__init__()的区别
		[转]python类中super()和__init__()的区别 单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(se ... 
- python 的__init__ 和__new__ 区别
		在此介绍一下 __init__ 和 __new__ 先后调用的区别 代码如下: # __init__ 和 __new__的区别 # 通常在编代码时,__init__ 较为常见,但是__new__却 ... 
- __new__和__init__的区别
		__new__是一个静态方法,而__init__是一个实例方法. __new__方法会返回一个创建的实例,而__init__什么都不返回. 只有在__new__返回一个cls的实例时后面的__init ... 
- __new__() 与__init__()的区别
		__new__作用于__init__之前.前者可以决定是否调用后者,或者说可以决定调用那个类的__init__方法. 首先要知道在面向对象编程中,实例化基本遵循创建实例对象,初始化实例对象,最后返回实 ... 
- 元类编程-- __new__和__init__的区别
		class User: def __new__(cls, *args, **kwargs): print (" in new ") return super().__new__(c ... 
- python __new__和__init__的区别
		http://www.cnblogs.com/tuzkee/p/3540293.html 继承自object的新式类才有__new__ __new__至少要有一个参数cls,代表要实例化的类,此参数在 ... 
随机推荐
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
			1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2970 Solved: 787[Submit][Status][ ... 
- stl binary search
			stl binary search */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola,&q ... 
- win8下在microsoft visual studio 2012利用ODP.NET连接ORACLE 12c
			老板要求我搭个ASP.NET框架,并且连接上ORACLE数据库,听起来好像挺简单的,但就是连第一步连接ORACLE我都搞了两天╮(╯▽╰)╭ 首先,项目书上要求用ORACLE 10G,可我自己的本本装 ... 
- HW4.24
			public class Solution { public static void main(String[] args) { double sum = 0; for(int i = 1; i &l ... 
- HW4.18
			public class Solution { public static void main(String[] args) { System.out.println("Graph 1&qu ... 
- dd usb 启动盘制作 成功版本
			在linux系统中,使用dd命令制作启动盘成功.方法是在终端中输入命令: dd if=/root/opensuse.iso of=/dev/sdb bs=4M 说明: 1.o ... 
- iOS开发之状态栏UIStatusBar图标操作
			NSArray *subIcons = [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] val ... 
- linux内核--软中断与tasklet
			硬件中断通常都需要在最短的时间内执行完毕,如果将所有硬件中断相关的处理都放在硬件中断处理程序中,那么就达不到这个目的. 通过linux提供的软中断和tasklet,可以将硬件中断处理程序中可以延迟处理 ... 
- mysql查询随机几条数据(速度快)
			MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE i ... 
- malloc()与calloc差别
			Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slig ... 
