如何在python3.3中使用types.new_class
方法?
以下是sigunature。
types.new_class(name, bases=(), kwds=None, exec_body=None)
如何使用exec_body?
exec_body
必须是可调用对象,并且它需要参数ns
。 (也许这意味着namespace
)
什么类型的对象应传递给ns
?
根据{{1}}的文件,
exec_body参数是一个回调,用于填充新创建的类命名空间。它应该接受类名称空间作为其唯一参数,并直接使用类内容更新名称空间。如果没有提供回调,则它与传入lambda ns:ns具有相同的效果。
我不知道上面关于new_class
和exec_body的描述的含义
我该如何使用这个功能?
答案 0 :(得分:4)
命名空间是一个字典。您可以使用希望新类对象具有的属性(包括方法)填充它。这是一个简单的演示。
import types
def body(ns):
def __init__(self, a):
self.a = a
d = {
'__doc__': 'A test class',
'some_cls_attr': 42,
'__repr__': lambda self: 'Test(a={})'.format(self.a),
'__init__': __init__,
}
ns.update(d)
Test = types.new_class('Test', bases=(), kwds=None, exec_body=body)
print(Test.some_cls_attr)
print(Test('hello'))
#help(Test)
<强>输出强>
42
Test(a=hello)
当然,对于这个简单的例子,使用普通的类创建语法会更加明智。