如何不使用废弃方法执行 `new.classobj(name, (base_class,), my_dict)`?
我在saucelabs的 example.py
文件中发现了一个使用 import new
模块的代码片段。
import new
# .. snip ..
def on_platforms(platforms):
def decorator(base_class):
module = sys.modules[base_class.__module__].__dict__
for i, platform in enumerate(platforms):
d = dict(base_class.__dict__)
d['desired_capabilities'] = platform
name = "%s_%s" % (base_class.__name__, i + 1)
module[name] = new.classobj(name, (base_class,), d)
return decorator
但是查看 help(new)
后发现,这个模块已经不推荐使用了。那么,有什么其他的方法可以实现 new.classobj(name, (base_class,), d)
呢?
1 个回答
5
type
这个关键词其实是一个类。你可以用下面的方式来实现上述功能:
module[name] = type(name, (base_class,), d)
这样做会返回一个名为name
的类,它的参数是基类base_class
的元组,同时用dict
中的d
来初始化成员对象。