如何传递要在 python 中使用的函数名称

how to pass the function name to be used in python

我有以下 json 模板

template.py

from string import Template

test1 = Template(u'''\
{
    "data": {
       "name": "$name"
    }
}
''')

并生成我使用的 JSONs JSONGen.py

import template

class JSONGen:
    result1 = template.test1.safe_substitute(
        name = 'SomeName'
    )
    print(result1)

现在可以工作了,它会生成 JSON 但我正在尝试创建一个接受模板名称的函数并将其命名为

JSONGenV2.py

import template

class JSONGenV2:

    def template_func(self, templateName):
        generatedTemplate = template.templateName.safe_substitute(
            name = 'SomeName'
        )

        print (generatedTemplate)

    template_func(test1)

现在我想要实现的是使用 'templateName' 内容作为调用的模板,就像现在一样

template.templateName.safe_substitute

给我一个错误,说 'templateName' 不存在,'templateName' 如何更改为在 tihs 情况下传递的值 'test1' 所以它会调用

template.test1.safe_substitute

谢谢

您需要一种方法将模板名称转换为实际模板的实例。
我会定义一个字典,键是模板名称,值是模板实例。

test1 = Template(...)
test2 = Template(...)
templates = {
    'test1': test1
    'test2': test2
}

现在在您的方法中,您可以使用模板字典来获取您请求的模板的实例:

def template_func(self, templateName):
    generatedTemplate = templates[templateName].safe_substitute(
        name = 'SomeName'
    )
    print (generatedTemplate)

你会像这样调用方法:template_func('test1')

使用getattr(),用法如下:

getattr(object, name[, default])

Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

应用于您的代码:

class JSONGenV2:

    def template_func(self, templateName):
        generatedTemplate = getattr(template, templateName).safe_substitute(
            name = 'SomeName'
        )

        print (generatedTemplate)

    template_func(test1)