我可以在Python中创建可构造的SimpleNamespace吗?

时间:2019-05-02 13:27:38

标签: python

我正在尝试动态地构建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

1 个答案:

答案 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.aself.b,可以尝试如下操作

def c(self):
    return a + b

然后可以按以下方式运行

In [5]: ns.c(5,6)                                                                                                                                                                                                                             
Out[5]: 11
相关问题