我正在尝试动态地构建twoNum
-我已经构建了常量,并且lambda起作用了,但是我不确定如何使ns
可构造。
class twoNum:
a = 1
b = 2
def c(self):
return self.a + self.b
ns = types.SimpleNamespace()
setattr(ns,'a',1)
setattr(ns,'b',2)
setattr(ns,'c',lambda : self.a + self.b)
当我这样做时:
r = ns()
我得到:
TypeError: 'types.SimpleNamespace' object is not callable
答案 0 :(得分:1)
您必须在定义它的python脚本之外实例化ns
。因此,如果您的script.py
中包含以下代码
import types
class twoNum:
a = 1
b = 2
def c(self):
return self.a + self.b
ns = types.SimpleNamespace()
setattr(ns,'a',1)
setattr(ns,'b',2)
setattr(ns,'c',lambda : self.a + self.b)
然后以下将起作用。
In [1]: from script import ns
In [2]: ns
Out[2]: namespace(a=1, b=2, c=<function <lambda> at 0x110dde6a8>)
In [3]: ns.a
Out[3]: 1
In [4]: ns.b
Out[4]: 2
您对函数c的定义也不正确,没有a和b作为类属性,因此无法执行self.a
或self.b
,可以尝试如下操作
def c(self):
return a + b
然后可以按以下方式运行
In [5]: ns.c(5,6)
Out[5]: 11