元类中__new__ 与 __init__的区别--day27
__new__ 与 __init__的区别
"""
new 与 init的区
__new__ 比__init__先执行 其作用是创建一个空的类对象
作为一个类对象 必须具备是三个组成部分 所以调用type中的__new__来完成组装
得到这个类对象后需要将其返回 以供__init__来使用
"""
class MyMeta(type):
# 用于新建类对象
def __new__(cls, *args, **kwargs):
print("new run")
# print(MyMeta)
# print(*args)
# 调用type通过的__new__方法来创建一个空的类对象 已经将三个组成部分都放到类对象中了
res = type.__new__(cls,*args)
return res
def __init__(self,class_name,bases,namespace):
print("init run")
print(self)
class Student(metaclass=MyMeta):
pass
print(Student)
__new__ 与 __init__的区
"""
new 与 init的区
__new__ 比__init__先执行 其作用是创建一个空的类对象
作为一个类对象 必须具备是三个组成部分 所以调用type中的__new__来完成组装
得到这个类对象后需要将其返回 以供__init__来使用
"""
class MyMeta(type):
# 用于新建类对象
def __new__(cls, *args, **kwargs):
print("new run")
# print(MyMeta)
# print(*args)
# 调用type通过的__new__方法来创建一个空的类对象 已经将三个组成部分都放到类对象中了
res = type.__new__(cls,*args)
return res
def __init__(self,class_name,bases,namespace):
print("init run")
print(self)
class Student(metaclass=MyMeta):
pass
print(Student)