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'声明有关...?提前致谢.
莱昂
简单地说,没有.没有(好的,最后看我的评论)这样做的方法.你能做的最好的事情是将它分配给另一个更短的名字:
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;博士:是的,有可能,不,你不应该这样做.您当前的代码很好而且清晰.