Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python +;的操作数类型不受支持:';类型';和';元组';_Python_Django - Fatal编程技术网

Python +;的操作数类型不受支持:';类型';和';元组';

Python +;的操作数类型不受支持:';类型';和';元组';,python,django,Python,Django,我是新手。我喜欢这个python配方,但是当我尝试在django上运行时会出现错误 def get_noconflict_metaclass(bases, left_metas, right_metas): """Not intended to be used outside of this module, unless you know what you are doing.""" # make tuple of needed metaclasses in specif

我是新手。我喜欢这个python配方,但是当我尝试在django上运行时会出现错误

def get_noconflict_metaclass(bases, left_metas, right_metas):
    """Not intended to be used outside of this module, unless you know
    what you are doing."""
    # make tuple of needed metaclasses in specified priority order
    metas = left_metas + tuple(map(type, bases)) + right_metas
    needed_metas = remove_redundant(metas)
错误

以下是数值:

left_metas (<class 'ccad.admin.ModelAdminWithForeignKeyLinksMetaclass'>,)
right_metas ()
...
 File "/opt/myenv/myproject/ccad/admin.py", line 201, in 
class SOAdetailAdmin(admin.ModelAdmin):
 File "/opt/myenv/myproject/ccad/noconflict.py", line 52, in make_class
def make_class(name, bases, adict):
 File "/opt/myenv/myproject/ccad/noconflict.py", line 30, in get_noconflict_metaclass
metas = left_metas + tuple(map(type(), bases,),) + right_metas
TypeError: Error when calling the metaclass bases
unsupported operand type(s) for +: 'type' and 'tuple'

谢谢你的评论。这确实有助于指出我应该做什么

根据代码段作者的解释和示例: 这里的问题是,因为D继承自A,所以它的元类必须继承自M_A,而不能是M_B

classmaker通过自动从M_A和M_B继承来解决此问题:

>>> class D(A):
...     __metaclass__=classmaker(right_metas=(M_B,))
>>> type(D)
我将原始代码更改为此,django工作正常:

class SOAdetailAdmin(admin.ModelAdmin):
    __metaclass__ = classmaker(right_metas=(ModelAdminWithForeignKeyLinksMetaclass,))

left_-metas
right_-metas
的值是什么?在添加它们之前,您可以打印left_-metas和right_-metas吗?@Charlesliasm请为这个问题“新手”提供您的输入参数??使用元类?是的,我第一次接触元类。我通常在django中使用meta
>>> class D(A):
...     __metaclass__=classmaker(right_metas=(M_B,))
>>> type(D)
class SOAdetailAdmin(admin.ModelAdmin):
    __metaclass__ = classmaker(right_metas=(ModelAdminWithForeignKeyLinksMetaclass,))