__str__和__format__的额外参数

时间:2015-12-24 13:08:29

标签: python global-variables

我正在编写一个应用程序,我想构建命令行并运行外部进程。命令行字符串需要允许某种变量插值,所以我选择使用常规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调用的参数。在制作示例时,我过分简化了这一点。

1 个答案:

答案 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))