您如何将globals()中的(属性,值)设置为方法(名称,值)?

时间:2018-12-26 23:31:20

标签: python setattribute globals

在JS中,您可以执行类似的操作,使用obj将对象/字典的所有键,值this[key] = obj[key]分配到全局命名空间/上下文obj中。

我希望能够做到这一点

class A:
    def call(self):
        print('a')

a = A()

globals()['call'] = lambda: None
print(globals())
setattr(globals(), 'call', a.call)

令人困惑的是,即使在打印globals()时明确定义了调用,我得到的错误仍然是AttributeError: 'dict' object has no attribute 'call'

1 个答案:

答案 0 :(得分:0)

class A:
    def call(self):
        print('a')

    def call2(self):
        print('b')

a = A()

method_names = list(filter(lambda func: '__' not in func, dir(a)))
for func in method_names:
    globals()[func] = getattr(a, func)

# globals()['call'] = a.call
print(globals())
call()
call2()
# setattr(globals(), 'call', a.call)
哎呀,当属性和键在JS中是同一件事时,它们混杂在一起。谢谢