大家好,最近一段时候正在看Python的元类,但是有一个地方比较疑惑,问题如下:
class MyMetaClass(type):
def __init__(cls,cls_name,cls_bases,cls_dict):
print('-----------------------------')
"""
问题2:__init__好像就没有什么用,随便怎么写.
"""
def __new__(cls, cls_name,cls_bases,cls_dict):
obj = super().__new__(cls,cls_name,cls_bases,cls_dict)
for key,value in obj.__dict__.items():
print(key,value)
"""
问题1:在这里:__new__按道理来说只是创建一个空对象,即Student,但是从结果来看,
在__new__当中对对象已经初始化了,也就是将__init__的活给干了,这是为什么,难道说元类
的__new__比较特殊吗??
__module__ __main__
__doc__ None
__weakref__ <attribute '__weakref__' of 'Student' objects>
teach <function Student.teach at 0x0000000002506378>
__dict__ <attribute '__dict__' of 'Student' objects>
__init__ <function Student.__init__ at 0x00000000025062F0>
country China
"""
return obj
class Student(object,metaclass=MyMetaClass):
country = 'China'
def __init__(self,name,age):
self.name = name
self.age = age
def teach(self):
pass
可以这样理解,对象是类的实例,类是元类的实例,
init方法是用来初始化实例的,new方法是用来创建实例的,