_ new__ 负责对象的创建,是构造函数,他需要返回一个实例,它是一个类的方法
_ init___负责对象的初始化,负责对 _new__s实例化的对象进行初始化,即对对象的状态和属性进行设置,他不允许有返回值
class Student:
def __new__(cls,name):
self = super().__new__(cls)
print("Student.__new__")
return self
def __init__(self,name):
print("Student.__init__")
self.__name = name
def doSth(self,skill):
print("%s表演:"%(self.__name),end='')
skill()
def sing():
print("唱歌")
def joke():
print("讲笑话")
def test():
studet1 = Student("Tom")
studet1.doSth(sing)
studet2 = Student("Kate")
studet2.doSth(joke)
test()
运行结果:
Student.__new__
Student.__init__
Tom表演:唱歌
Student.__new__
Student.__init__
Kate表演:讲笑话
可以看到:由类来创建对象的过程,是先调用__new__创建对象, 然后在调用__init__初始化对象
aaa