元类和父类中同时写了__new__方法

来源:8-7 通过元类实现orm-2

神羅ten徵

2019-01-01

定义了三个类A、B、C,三个类的关系为A(B), B(metaclass=C)
照理说,A或B中若写了__new__方法,其作用是控制实例对象的生成
元类C若写了__new__方法,其作用是控制类对象的创建过程
照理说两种__new__的作用不同,不会冲突
但发现若A和C或B和C同时写了__new__方法时,只有C中的__new__方法被执行了,A或B中的__new__方法并没有执行,并且还提示警告:
DeprecationWarning: class not set defining B as <class ‘main.B’>. Was classcell propagated to type.new?
请问这个警告是什么意思呢?为什么类和其元类不能同时写__new__方法呢?
谢谢!

写回答

1回答

bobby

2019-01-03

课程中讲解到 类是由元类生成的,元类也是累, 所以元类的构造过程也可以被覆盖, 所以你这里面两个雷都重写new方法的目的是什么呢

0
1
神羅ten徵
并不是想达到什么目的哈,因为课程中说元类C中的__new__是用于创建类对象,而B或A中的__new__是用于创建实例对象,不知两者具体有何不同,所以为了加深对元类以及其魔法函数的理解而做个实验~ 照您说的,如果元类的构造函数可以被覆盖,那这里应该是执行A或者B中重写的__new__方法啊,为何反而是C中的__new__方法被执行了呢?
2019-01-03
共1条回复

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

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

2121 学习 · 551 问题

查看课程