在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__()的形参,是要被创建的类的名称。

1
0

bobby

2018-07-06

你把完整的代码截图我看看

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程