Python 2中支持3的元类创建字符串名称

Python 2中支持3的元类创建字符串名称,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,为准备好Python3,翻译以下内容的正确方法是什么 type('Name', (object, ), {}) 原则上,这一行保持不变,但在使用Django时,我开始将以下一行添加到我的所有文件中,如前所述: 所以我有 from __future__ import unicode_literals type('Name', (object, ), {}) 这反过来又会 TypeError: type() argument 1 must be string, not unicode 以下作

为准备好Python3,翻译以下内容的正确方法是什么

type('Name', (object, ), {})
原则上,这一行保持不变,但在使用Django时,我开始将以下一行添加到我的所有文件中,如前所述:

所以我有

from __future__ import unicode_literals 
type('Name', (object, ), {})
这反过来又会

TypeError: type() argument 1 must be string, not unicode
以下作品

from __future__ import unicode_literals 
type(str('Name'), (object, ), {})

但我很确定这毫无意义。哪种处理方法正确?

请查看。看起来你做的是对的,他们也使用了
str('ClassName')
结构。

最好不要使用
unicode\u文本<对于所有这些实际的unicode文本,code>u'…'
在Python2和Python3中都能正常工作。为什么要使用低级的
type('Name',(object,),{})
我没有定义真正的
?@MartijnPieters我编辑了这个问题来解释
unicode\u文本
是在Django中提出的documentation@andrea.ge:如果您只针对3.3及更高版本,那么您已经找到了一个不使用
unicode\u文字的好理由,至少不用于该特定模块。@andrea.ge:是,每当需要unicode文本时,都会使用
u'
。考虑将代码< > Type()/代码>调用到一个单独的模块中的实用程序中,如果这太痛苦了。这只是“其中的一种情况”,其中Py2和Py3对字符串内容和文字的解释没有一个干净、简洁的映射。(其他示例包括py3允许unicode类名,但py2不允许,以及py3中缺少
ur'raw unicode'
文本。)正如@greschd所说,显式转换到
str
可能是拥有交叉兼容代码的最佳方法。
from __future__ import unicode_literals 
type(str('Name'), (object, ), {})