当前位置: 首页 > 知识库问答 >
问题:

基于方法和参数之间的配置映射器将动态参数传递给方法

阳兴朝
2023-03-14

嗨,我有一个向不同函数传递动态参数的问题。

例如:

假设我有7个变量(Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7)都是计算变量。

现在,我只需要将arg1、arg2、arg3变量传递给method1、arg1、arg4、arg5等。

我需要动态地做这件事。

就像在方法和它可以接受的变量之间有一个映射函数一样。通过选择方法,我需要得到它可以接受的变量,并只将这些变量传递给函数

def method1(arg1,arg2,arg3):
    pass

def method2(arg1,arg4,arg5):
    pass

def method3(arg1,arg2,arg4,arg6)
    pass

如何实现这一点????

共有3个答案

孔鹤龄
2023-03-14

我还尝试了另一种方法。如果我在这个方法上错了,请纠正我

在一个类中,所有变量都在init中。您可以计算或更改变量。然后在获得方法名之后,我将调用包装器来获取需要传递给该方法的变量,然后使用变量调用该方法

class Class1():
   def __init__(self):
      self.arg1 = 0
      self.arg2 = 0
      self.arg3 = 0
      self.arg4 = 0
      self.arg5 = 0

   def compute(self):
       self.arg1 =1 
       self.arg4 = 1
       method_name = "cars"

       method_to_call = getattr(Class1(),method_name)
       method_variables = method_to_variables_mapper(method_name)
       result = method_to_call(method_variables )

       print result

   def method_to_variables_mapper(method_type):
      mapper = {
           "method1" : [{"arg1_name" : self.arg1} , {"arg2_name" :                  
          self.arg2}]
           "method2" : [{"arg3_name" : self.arg3}],
           "method3" : [{"arg1_name" : self.arg1}, {"arg3_name" :  
          self.arg3}] 
        }

     return mapper[method_type]

   def cars(self, *args)
       return 1

   def bikes(self,*args)
       return 2
田嘉澍
2023-03-14

下面是一个非常基本的示例,说明如何将方法映射到参数。它假设args是一个dicing,它在call的范围内。您可能需要将您的args作为参数传递给call

method_mapper = {
    method1: ('arg1', 'arg2', 'arg3'),
    method2: ('arg1', 'arg4', 'arg5'),
    method3: ('arg1', 'arg2', 'arg4', 'arg6')
}

def call(method):
    arg_names = method_mapper.get(method)
    if arg_names:  # we have args
        print("method is %s" % (method.__name__))
        print("  argument names are %s ; where" % (arg_names,))
        for name in arg_names:
            print ("    %s = %s" % (name, args.get(name)))

call(method1)
商绍元
2023-03-14

命名参数可能是您正在寻找的解决方案,因为您可以将命名值的字典传递给每个方法调用。例如:

# named arguments
args = {
    'arg1': 'One',
    'arg2': 'Two',
    'arg3': 'Three',
    'arg4': 'Four',
    'arg5': 'Five',
    'arg6': 'Six',
    'arg7': 'Seven'
}


# explicitly name the parameters, good for readability
def method1(arg1=None,arg2=None,arg3=None, **kwargs):
    print("arg1 %s arg2 %s arg3 %s" % (arg1, arg2, arg3))

# explicitly name the parameters, good for readability
def method2(arg1=None,arg4=None,arg5=None, **kwargs):
    print("arg1 %s arg4 %s arg5 %s" % (arg1, arg4, arg5))

# no named parameters, check the kwargs dict for each required argument
def method3(**kwargs):
    arg1 = kwargs.get('arg1')
    arg2 = kwargs.get('arg2')
    arg4 = kwargs.get('arg4')
    arg6 = kwargs.get('arg6')
    print("arg1 %s arg2 %s arg4 %s arg6 %s" % (arg1, arg2, arg4, arg6))

method1(**args)
method2(**args)
method3(**args)

运行该代码将生成以下输出:

arg1 One arg2 Two arg3 Three
arg1 One arg4 Four arg5 Five
arg1 One arg2 Two arg4 Four arg6 Six
 类似资料:
  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 问题内容: 方法context.getBean(name,user)的文档说 允许指定显式构造函数参数/工厂方法参数 但是无论我做什么(尝试一切),使用最合理的设置在初始化期间加载Bean时都会得到以下信息: 注释说可以做到的,但是如果您在该bean的xml定义中指定构造函数参数,则失败。 问题答案: 在javadoc中说: args-在使用静态工厂方法的显式参数创建原型时使用的参数。 因此,be

  • 我试图通过动态输入要从中提取数据的工作表的名称,以这种方式重用现有的数据提供程序,将Excel文件中的数据加载到我的测试框架中。 示例:我正在从Login凭据表加载数据,该表代表成功登录测试的数据。第二个测试是失败的登录测试,它从InvalidLogin凭据表加载数据。第三个测试从第三个表UserInformation等中提取数据。我所遵循的udemy课程并没有真正涵盖这个主题,我觉得整个事情的实

  • 本文向大家介绍shell传参并将参数传递给sql文件的方法,包括了shell传参并将参数传递给sql文件的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 调用代码:   sh /tmp/t.sh 20160808  以上这篇shell传参并将参数传递给sql文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段

  • 问题内容: 我将主类作为命令行参数传递给启动VM 现在我需要将命令行参数传递给该主类 有什么办法吗? 这就是我做的方式 这里的userVMargs是我的主类的类路径,也是该类的类路径,该类路径用于调用主类内部的类方法 和cmdLine拥有我的主类以及该类及其功能,我使用eclipse作为IDE来开发我的项目 问题答案: 如果要通过发送参数来启动VM,则应发送VM参数而不是程序参数。 程序参数是传递