2017-03-16 61 views
1

如何在python3.3以后使用types.new_class方法?
以下是sigunature。Python中名称空间对象的含义

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的描述的含义。
如何使用此功能?

+0

也许开始使用lambda。或者把它作为无 – abccd

回答

2

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

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) 

当然,对于这个简单的例子是更合理的使用普通类创建语法。

相关问题