我觉得这是一个非常简单的问题,但我找不到合适的答案。基本上我有一个从名为 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);
有没有办法调用这些函数而不必每次都重复类名?沿线的东西:
(thethingIwant) simulation:
addGroup("teapotarmy")
populateGroup(20)
addNode("input",INPUT)
...
我用其他编程语言做过这个,但我还没有弄清楚 Python 中的语法。我隐约记得它与“with”语句有关......? 提前致谢。
莱昂
请您参考如下方法:
简单地说,不。没有(很好,最后看到我的评论)方法来做到这一点。您能做的最好的事情就是将它分配给另一个更短的名称:
s = simulation
s.addGroup("teapotarmy")
...
这还不算太糟糕,尽管我认为常规方法更具可读性。
另外,严格您不能这样做并不是真的。您可以通过编程方式将所有模拟方法分配给本地 namespace ,但是,这样做会让人非常困惑,我建议不要这样做。
例子:
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()
注意这是非常脆弱的——你必须小心并做一些事情,比如检查你没有覆盖值,检查值在上下文管理器退出之前没有被删除,等等……也不清楚发生了什么上。
tl;dr:是的,有可能,不,你不应该这样做。您当前的代码很好且清晰。
