在Python 3.1中从new导入classobj

3 投票
3 回答
2303 浏览
提问于 2025-04-16 12:03

我该怎么把这个Python 2.x的代码改成在3.1上能运行的呢?

这行代码不能正常工作。

from new import classobj

错误提示是“没有这个模块 new”。

3 个回答

0

如果你在一个包里面,你需要把它改成相对导入:

from .new import classobj
4

你可以使用 type 这个函数:

X = type('X', (object,), {'a': 1})
4

在Python 2.x中,new.classobj是旧式类型的类型。在Python 3.x中没有旧式类型。要把你的代码从Python 2.x迁移到Python 3.x,首先需要把它更新到最新的Python 2.x标准,这意味着要停止使用旧式类,只使用新式类。

所以答案是,别用classobj,用type,但你需要先把2.x的代码改成用type,然后再考虑迁移到Python 3.x。

顺便提一下,查看PEP 3108可以看到在Python 3.x中移除的模块列表。特别是:

new

  • 只是把名字从'types'模块重新绑定过来。
  • 也可以直接调用内置的type来轻松获取大多数类型。
  • 文档说明这个模块在修订27241后就不再有用(2002-06-15)。

撰写回答