我正在编写一个应用程序,我想构建命令行并运行外部进程。命令行字符串需要允许某种变量插值,所以我选择使用常规str.format()
方法。
问题是,我想要插入的一些值取决于从外部传递的外部上下文,但我看不到任何转发它的方法。
例如:
class SomeObject:
def get_path(self, context):
return context.directory / self.name
def x(context, some_object):
# This doesn't work, but illustrates what I would like to do:
return "gzip {0.get_path(1)}".format(some_object, context)
我唯一的想法是将上下文放入全局变量或some_object中,但这并不足以让人感到pythonic: - )。
我正在使用python3,但python2解决方案也很有趣。
编辑:格式字符串(此示例中为"gzip {0.get_path(1)}"
)实际上也是从ouside传递的,因此我无法将.get_path(1)
移动到format
调用的参数。在制作示例时,我过分简化了这一点。
答案 0 :(得分:0)
实际上非常简单。所需要的只是some_object
的包装,它会添加context
。像这样:
class Wrapper:
def __init__(self, o, context):
self._o = o
self._context = context
def __getattr__(self, name):
return getattr(self._o, "get_" + name)(self._context)
...并像这样使用它:
return "gzip {0.path}".format(Wrapper(some_object, context))