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下自动可见?
您可以控制传递给 的字典interact,因此可以将您想要的内容放入其中,而不必担心局部变量main:
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)\nRun Code Online (Sandbox Code Playgroud)\n\n这适用于常规方法、静态方法和类方法。它看不到实例属性(除非它们隐藏类属性)或继承的方法。
\n\n仅当实例将函数存储为属性时,前者才重要(在这种情况下,您可能希望也可能不希望它们可用)。后者很方便,因为它省略了object;如果还有其他基类,可以通过搜索轻松包含它们framework.__mro__(并且仍然省略object)。