我可以用Python创建一个可构造的SimpleNamespace吗?

2024-07-04 06:05:06 发布

您现在位置: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

Tags: lambdaselfreturnobjectisdef动态class
1条回答
网友
1楼 · 发布于 2024-07-04 06:05:06

必须在定义它的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

相关问题 更多 >

    热门问题