Python中名称空间对象的含义



如何在python3.3中使用 types.new_class方法?
以下是sigunature。

types.new_class(name, bases=(), kwds=None, exec_body=None)  

如何使用exec_body?
exec_body必须是可呼叫的对象,并且该参数ns。(也许意味着namespace
什么类型的对象应该传递给ns
根据new_class的文档,

exec_body参数是一个回调,用于填充新鲜创建的类名称空间。它应该接受类名称空间作为其唯一参数,并直接使用类内容更新名称空间。如果没有提供回调,则其效果与Lambda NS:NS中的传递相同。

我不知道上述描述有关 ns和exec_body的含义。
如何使用此功能?

名称空间是字典。您可以用想要新类对象具有的属性(包括方法)填充它。这是一个简单的演示。

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)

当然,对于这个简单的示例,使用普通类创建语法更为明智。

最新更新