python a
.....
对象实例化过程会经历两个magic method(魔术方法),但我们往往不自己定义 __new__(cls)
对象的创建和初始化
对象实例化的过程
正常情况只需初始化,不需要创建是因为定义类的时候从父类继承了
事实上不需要def __new__(cls)(一般在def __init__(self)之前就定义的),因为我们 在创建类时,继承了object对象。
类的实例化过程-----__new__
the process of creating an object
对象实例化
构造对象的过程:
首先调用__new__方法创建类的对象:def __new__(cls),通常不必定义(继承父类,父类会创建类对象),返回一个类的初始对象
将返回的对象交给__init__,对属性进行设置:def __init__(self)
class Programer(object): def __new__(cls, *args, **kwargs): #改写new方法 print 'call __new__ method' print args return super(Programer, self).__new__(cls, *args, **kwargs) def __init__(self, name, age): print 'call __init__ method' self.name = name self.age = age if __name__ = '__main__': programer = Programer('Albert', 25) print programer.__dict__
对象实例化的过程
#Python有垃圾回收机制,会自动调用__del__()方法
class Programer(object):
def __new__(cls,*args,**kwargs):
print ('call __new__ method')
print(args)
return super(Programer,cls).__new__(cls)#object() takes no parameters 不需要参数
def __init__(self,name,age):
print ('call __init__ metod')
self.name = name
setattr(self,"name",name)
pass
programer = Programer("Test",20)
print (programer.__dict__)
平常不需要__ new__ 因为通常是继承了父类的(新式类均有继承), 父类会创建类对象.
def __new__(cls): # pass return cls
__new__ 其实在 __init__ 之前创建一个对象, 且__ new__必须返回一个对象的, __init__不需要返回.
对象实例化的过程: