在8-7小节中的
来源:8-7 通过元类实现orm-2

一台电脑的世界
2018-07-02
在8-7小节中的 在元类ModeMetaClass类中有两行代码,下面两行代码我不是很理解,希望能简答下 谢谢
if name=="BaseModel" :
return super().__new()__()
2回答
-
Jazz_Qi
2018-08-27
我不知道是否正确,但是你可以参考一下我是这样理解的:
User-->BaseModel-->ModeMetaClass(元类)
魔法函数__new__()用来创建类,如同type(类名称,(),{})或class 类名称:代码的效果
User继承了BaseModel,而BaseModel中指定了元类为ModeMetaClass,所以user=User()实例化的时候,__init__是使用BaseModel的,但是在__init__之前会先运行__new__,所以__new__是使用ModeMetaClass中的。
ModeMetaClass(元类)中先使用__new__创建出BaseModel类,接着User类继承刚刚被创建出来的BaseModel类,然后再使用ModeMetaClass(元类)中的__new__来创建User类,所以元类中的__new__被使用了两次,所以if name=="BaseModel":return super().__new()__() 是在第一次使用ModeMetaClass(元类)中的__new__运行的代码,这样就使得后面一大段代码只在第二次使用ModeMetaClass(元类)中的__new__创建User类时候才有。
备注:name是ModeMetaClass(元类)中的__new__()的形参,是要被创建的类的名称。
10 -
bobby
2018-07-06
你把完整的代码截图我看看
00
相似问题
回答 1
回答 2