如何从一个对象别名所有方法?

And*_*rei 5 python interpreter interactive object python-3.x

我创建的脚本实际上是其他用户在上面编写代码的环境。

我已经在一个类中声明了几种方法并实例化了一个对象,以便用户可以将这些方法用作简单的解释器函数,如下所示:

from code import interact

class framework:
    def method1(self, arg1):
    # code for method1
    def method2(self, arg2):
    # code for method2

def main():
    fw = framework()

    # Aliases
    method1 = fw.method1
    method2 = fw.method2

    interact(local=locals())
Run Code Online (Sandbox Code Playgroud)

由于不希望用户使用调用方法fw.method1(arg),因此我设置了别名。问题是,由于框架类正在开发中,因此我必须使用创建的方法的新别名不断更新主脚本。

是否有一种简单的方法来摆脱fw.调用中的“ ”部分,并使类框架下的所有方法在main下自动可见?

Dav*_*ing 4

您可以控制传递给 的字典interact,因此可以将您想要的内容放入其中,而不必担心局部变量main

\n\n
d={}\nfor n in vars(framework):\n  if n.startswith('_'): continue  # probably\n  x=getattr(fw,n)\n  if callable(x): d[n]=x\ninteract(local=d)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这适用于常规方法、静态方法和类方法。它看不到实例属性(除非它们隐藏类属性)或继承的方法。

\n\n

仅当实例将函数存储为属性时,前者才重要(在这种情况下,您可能希望也可能不希望它们可用)。后者很方便,因为它省略了object;如果还有其他基类,可以通过搜索轻松包含它们framework.__mro__(并且仍然省略object)。

\n