KiY*_*ter 5 python class function
以后如何types.new_class在python3.3中使用method?
以下是签名。
types.new_class(name, bases=(), kwds=None, exec_body=None)
Run Code Online (Sandbox Code Playgroud)
如何使用exec_body?
exec_body必须是可调用对象,并且需要一个参数ns。(也许这意味着namespace)
应该传递给什么类型的对象ns?
根据 的文件new_class,
exec_body 参数是一个回调,用于填充新创建的类命名空间。它应该接受类命名空间作为其唯一参数,并直接使用类内容更新命名空间。如果没有提供回调,它与传入 lambda ns: ns 具有相同的效果。
我不知道上面关于nsexec_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)
Run Code Online (Sandbox Code Playgroud)
输出
42
Test(a=hello)
Run Code Online (Sandbox Code Playgroud)
当然,对于这个简单的例子,使用普通的类创建语法要明智得多。
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |