可以在不使用class
关键字的情况下定义班级
以下......
get_i = lambda self: self.i
get_i.__name__ = 'get_i'
get_i.__qualname__ = 'Klass2.get_i'
dct = dict(a=1, i=4, get_i=get_i)
Klass2 = type('Klass2', (SuperK,), dct)
...产生的结果与:
相同class Klass1(SuperK):
a = 1
i = 4
def get_i(self):
return self.i
我们如何为功能做类似的事情?也就是说,如何在不使用def
或lambda
关键字的情况下定义函数?如果以下两段代码创建相同的dehf
s,那么foo
的纯python实现会是什么样的?
def foo(bar):
bar += 934
return bar
foo = dehf(blah, blah, blah, blah, [...])
答案 0 :(得分:1)
您可以通过调用types.FunctionType
构造函数来创建函数。但请记住,此构造函数未记录且特定于实现。在CPython中,我们可以通过调用help(types.FunctionType)
来确定构造函数参数:
class function(object)
| function(code, globals[, name[, argdefs[, closure]]])
|
| Create a function object from a code object and a dictionary.
| The optional name string overrides the name from the code object.
| The optional argdefs tuple specifies the default argument values.
| The optional closure tuple supplies the bindings for free variables.
要创建代码对象,我们可以使用compile
:
code = compile('print(5)', 'foo.py', 'exec')
function = types.FunctionType(code, globals())
function() # output: 5