Skip to main content
 首页 » 编程设计

python之Python中从一个类中调用多个函数而无需每次都重复类名

2025年05月04日13artech

我觉得这是一个非常简单的问题,但我找不到合适的答案。基本上我有一个从名为 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:是的,有可能,不,你不应该这样做。您当前的代码很好且清晰。