从Python中的类调用多个函数,而不是每次都重复类名

leo*_*vlt 1 python syntax class function with-statement

我觉得这是一个非常简单的问题,但我找不到合适的答案.基本上我有一个名为simulation的类调用函数列表:

simulation.addGroup("teapotarmy")
simulation.populateGroup(20)
simulation.addNode("input",INPUT)
simulation.addNode("output",OUTPUT);
simulation.connectNodes("input","output");
simulation.manipOutputNode("output", "group.xvel");
simulation.manipInputNode("input", 1, 0.05);
Run Code Online (Sandbox Code Playgroud)

有没有办法调用这些函数而不必每次都重复类名?沿线的东西:

(thethingIwant) simulation:
    addGroup("teapotarmy")
    populateGroup(20)
    addNode("input",INPUT)
    ...
Run Code Online (Sandbox Code Playgroud)

我用其他编程语言完成了这个,但我还没有弄清楚Python中的语法.我有一个微弱的记忆,它与'with'声明有关...?提前致谢.

莱昂

Gar*_*tty 6

简单地说,没有.没有(好的,最后看我的评论)这样做的方法.你能做的最好的事情是将它分配给另一个更短的名字:

s = simulation
s.addGroup("teapotarmy")
...
Run Code Online (Sandbox Code Playgroud)

这不是太糟糕,虽然我认为正常的方法是更具可读性的方法.

另外,你不能做到这一点并不完全正确.您可以以编程方式将所有模拟方法分配给本地命名空间,但是,这样做会非常混乱,我建议不要这样做.

例:

from contextlib import contextmanager
import inspect

class some_class:
    def test(self):
        print("test!")

@contextmanager
def map_to_local(inst, locals):
    methods = inspect.getmembers(inst, inspect.ismethod)
    for name, method in methods:
        locals[name] = method
    yield
    for name, method in methods:
        del locals[name]

inst = some_class()
with map_to_local(inst, locals()):
    test()
Run Code Online (Sandbox Code Playgroud)

注意这是非常脆弱的 - 你必须要小心,做一些事情,比如检查你是不是覆盖了值,在上下文管理器退出之前检查值还没有被删除等等......这也很不清楚是怎么回事.

tl;博士:是的,有可能,不,你不应该这样做.您当前的代码很好而且清晰.