Случайно выбрать и изменить переменную экземпляра класса - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть класс с несколькими переменными, и я хотел бы случайно выбрать одну из ее переменных и изменить ее.Чтобы выбрать мою переменную, я использую тот факт, что каждый экземпляр класса имеет dictionary и пакет random;

import random as rnd
import chromosome as Chromosome

instance1 = Chromosome() #creates class instance
random_key = rnd.choice([instance1.__dict__]) #picks out random key

instance1.random_key = 5 #change the value of the random key

Последняя строка, очевидно, не работает, но мне интересно, есть лилюбой способ получить эту функциональность?Я попытался использовать функцию форматирования, но это не сработало.

Другим решением может быть выбор случайного числа от 0 до длины моего словаря.Я мог бы вручную выписать каждое изменение переменной, которое я хочу сделать, но изменить только одно из них в зависимости от того, что является случайным числом, это может выглядеть примерно так:

import random as rnd
import chromosome as Chromosome

instance1 = Chromosome() #creates class instance
which_var_to_change = rnd.randint(1,len(instance1.__dict__)) #the for loop below works as if the length is 2
counter = 1

for key, value in instance1.__dict__.items():
    if key == 'first_variable' and counter > which_var_to_change:
        instance1.first_variable = 5 #change the value of the random key
    if key == 'second_variable' and counter > which_var_to_change:
        instance1.second_variable = 5 #change the value of the random key
    counter += 1

Проблема с этим решениемчто если у меня будет слишком много переменных, это станет безумно грязным.

1 Ответ

0 голосов
/ 04 февраля 2019

Чтобы выбрать случайную переменную из экземпляра класса и изменить ее (где Chromosome - это класс);

import random as rnd
import chromosome as Chromosome

instance1 = Chromosome() #creates class instance
random_key = rnd.choice([instance1.__dict__]) #picks out random key

instance1[random_key] = 5 #change the value of the random key
...