1

Suppose I have,

class example(object)
    def __init__(var1 = 10, var2 = 15, var3 = 5)
        do a few things here 

    Other methods here

There are other classes which are not relevant for the question.

To study the behavior of the system, I vary the inputs in the __init__ method above, one at a time. I have another function start_simulation function that takes the name of the input that I want to change as a string and its possible values. (It uses this name and the values to also create file names that store the results from the execution). For example, I have

def start_simulation(var_under_study, var_under_study_values):
    '''type of var_under_study: string''' 
    for value in var_under_study_values:

        example_instance = example(var_under_study = value) 
        # I have to specify the var_under_study manually in this line. 
        # If it is var1, I have to manually type var1 here. 
        # I want to know if there is a way so that once I specify 
        # the string var_under_study in the argument of the 
        # start_simulation function, this line takes that and sets the
        # variable with that name to the specified value.

        other stuff here

I call this function elsewhere by writing

start_simulation(var_under_study = 'var1', var_under_study_values = [5, 15, 20])

Now, if I want to study effects of var2 instead, I have to specify it in the arguments of start_simulation function:

start_simulation(var_under_study = 'var2', var_under_study_values = [5, 15, 20])

but I also have to go back where the function is defined and change the argument in the line example_instance = example(var_under_study = value). For instance, in place of example_instance = example(var1 = value) I have to write:

example_instance = example(var2 = value)

Is there a way I can just specify the variable in the

start_simulation(var_under_study = 'var2', var_under_study_values = [5, 15, 20])

and have

example_instance = example(var1 = value)

line take account of that.

Thanks for your help. Please let me know if I can clarify. I am trying to avoid having to change the same/similar thing in multiple places so that I don't get incorrect results because I forgot to change it somewhere.

1 Answer 1

3

If I understand you correctly, you want to specify the name of the parameter that should be set dynamically. You can use dictionary unpacking:

example_instance = example(**{var_under_study: value})

This will pass the contents of the dictionary as parameters to the function, where the keys are the parameter names and the values the values :)

Side note: You should start class names with an uppercase letter to make them more distinguishable from a function.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.