gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:25 26 4
gpt4 key购买 nike

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

关于python - Python中从一个类中调用多个函数而无需每次都重复类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com