2 qq 28194939 qq_28194939 于 2016.01.30 13:36 提问

关于python元类遇到的问题(TypeError: metaclass conflict)?

from abc import ABCMeta
class test1(object):
metaclass = ABCMeta
def test1(self):
print 'test1'

class UpperAttrMetaclass(type):
def new(cls, name, bases, dct={}):
a = super(UpperAttrMetaclass, cls).__new__(cls, name, l, dct)
return a

b = UpperAttrMetaclass('hehe',(test1,),{})(3)
会报错如下:TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
如果将test1中的__metaclass__ = ABCMeta去掉就能运行。但是如果不去掉如何
解决呢?(因为需要在程序运行时动态创建新类,继承类的种类和数量都是临时决定的)

1个回答

devmiao
devmiao   Ds   Rxr 2016.01.31 07:07
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于python类继承中metaclass conflict的处理
最近宝宝在做一个pyqt5的项目,昨夜遇到了上述问题,不过伴随男票无限defeat以及掉到黄金的叹息声中,宝宝终于解决了问题。果然没有本宝宝,你还能上王者? 先描述下项目:项目中有个初期描绘UI的文件叫做initMainWindow.py,其中定义了一些组件,布局什么的。 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWi
Python继承中的元类
Python 元类 继承
python中的元类Metaclass
python中的元类Metaclass理解元类之前需要学习的知识如果说让我们创建一个类,最先想到的肯定是用class创建,当我们使用class创建类的时候,python解释器自动创建这个对象,但是python同样也提供了手动处理的方法来创建类,这就是用python的自建函数type()。我们所熟知的type()函数的作用是返回一个参数的类型,但是实际上,它也有一种完全不同的能力,即接受一个类的一些描
python——type()、metaclass元类和精简ORM框架
1、type()函数 #type()函数既可以返回一个对象的类型,又可以创建出新的类型, # 比如,我们可以通过type()函数创建出Hello类,而无需通过class Hello(object)...的定义: def fn(self,name='world'): #先定义函数 print('Hello, %s.'%name) #开始用type() hello = type('Hel
MetaClass 与 ORM
···MetaClass MetaClass翻译过来就是元类,什么叫元?元者,源也,根也,本也!所谓元类就是能够创造出其他类的类,即原始类。
python3学习笔记:元类metaclass
转载过来格式很丑,不能看,所以作罢。详见这篇博客http://blog.jobbole.com/21351/
python笔记:深刻理解Python中的元类(metaclass)
译注:这是一篇在Stack overflow上很热的帖子。提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解。他知道这肯定和自省有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程。于是e-satis同学给出了神一般的回复,该回复获得了985点的赞同点数,更有人评论说这段回复应该加入
举例讲解Python中metaclass元类的创建与使用
举例讲解Python中metaclass元类的创建与使用元类是可以让你定义某些类是如何被创建的。从根本上说,赋予你如何创建类的控制权。元类也是一个类,是一个type类。元类一般用于创建类。在执行类定义时,解释器必须要知道这个类的正确的元类,如果此属性没有定义,它会向上查找父类中的__metaclass__属性。如果还没发现,就查找全局变量。 对于传统类来说,它们的元类是types.ClassTyp...
python——metaclass
元类一般用于创建类。在执行类定义时,解释器必须要知道这个类的正确的元类。解释器会先寻找类属性__metaclass__,如果此属性存在,就将这个属性赋值给此类作为它的元类。如果此属性没有定义,它会向上查找父类中的__metaclass__.如果还没有发现__metaclass__属性,解释器会检查名字为__metaclass__的全局变量,如果它存在,就使用它作为元类。否则, 这个类就是一个传统类
python之metaclass+singleton(二)
metaclass本文参考了http://blog.jobbole.com/21351/ 中的一些概念。metaclass 基本概念什么是metaclass? 英文解释:A metaclass is defined as “the class of a class”. 中文称metaclass为“元类”,其实就是用来生成类的类,因为在上节中已经介绍了,类也是一个对象,那么这个对象是由谁来创建生