请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

定义了三个类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__方法呢?
谢谢!

正在回答 回答被采纳积分+3

1回答

bobby 2019-01-03 17:14:12

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

0 回复 有任何疑惑可以回复我~
  • 提问者 神羅ten徵 #1
    并不是想达到什么目的哈,因为课程中说元类C中的__new__是用于创建类对象,而B或A中的__new__是用于创建实例对象,不知两者具体有何不同,所以为了加深对元类以及其魔法函数的理解而做个实验~
    
    照您说的,如果元类的构造函数可以被覆盖,那这里应该是执行A或者B中重写的__new__方法啊,为何反而是C中的__new__方法被执行了呢?
    回复 有任何疑惑可以回复我~ 2019-01-03 17:29:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信