在ipython脚本笔记本中我希望有类似的东西:
from mod import run
def initialize():
print("In!")
run()
该脚本假设用户需要定义一个函数initialize,run()应测试它是否已定义并调用它。
我应该如何定义run()来获取对交互命名空间中定义的“初始化”函数的引用?
答案 0 :(得分:0)
这是一种可能的方法 -
模块内部:
class MyHandler(object):
def __init__(self, *args):
""" Init stuff """
def run(self, *args):
self.initializer(*args)
"""do running stuff"""
pass
def initializer(self):
raise Exception("Initializer must be defined")
def shutdown(self):
"""default cleanup stuff"""
pass
然后Ipython工作流程可能类似于:
from mod import MyHandler
new_handler = MyHandler()
def add_method(obj, meth):
obj.__dict__[meth.__name__] = meth.__get__(obj, obj.__class__)
def intializer(self):
print("In!")
add_method(new_handler, initializer)
new_handler.run()