класс Python, который принимает пару переменных - PullRequest
0 голосов
/ 19 апреля 2011

Я хотел бы написать класс, который принимает пару переменных в виде (variableName, value).Однако имена переменных известны только во время выполнения, а также число аргументов известно во время выполнения.В моем классе у меня есть объект, где я хочу установить эти параметры.Так что мне нужно перебрать все переменные и установить атрибут, как показано ниже.

setattr (self.obj, variableName, value)
self.obj.make()

1 Ответ

5 голосов
/ 19 апреля 2011

Вы можете сделать:

class C(object):
    def __init__(self, **kwargs):
        for (variableName, value) in kwargs.items():
            # setattr(), etc.

, который вы бы вызвали с помощью C(x=3, y=123,…).

Если вы действительно хотите использовать список переменных [variableName, value,…], выможно сделать:

class C(object):
    def __init__(self, *args):
        arg_iter = iter(args)
        for (variableName, value) in zip(arg_iter, arg_iter):
            # setattr(), etc.

, который вы вызываете с C('x', 3, 'y', 123,…).Трюк zip() группирует аргументы списка аргументов (args) по парам.Возможно, вы захотите добавить проверку количества переданных аргументов (C(3) принимается вышеприведенным кодом, потому что zip() не возражает против использования двух последовательностей разной длины).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...