Есть ли способ, которым я могу определить __init__
так ключевые слова, определенные в **kwargs
присвоены классу?
Например, если я должен был инициализировать a ValidationRule
класс с ValidationRule(other='email')
, значение для self.other
должен быть добавлен к классу, не имея необходимость явно называть каждый возможный kwarg.
class ValidationRule:
def __init__(self, **kwargs):
# code to assign **kwargs to .self
Возможно, это не самый чистый способ, но он работает:
class ValidationRule:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
Я думаю, что предпочитаю решение одного , потому что оно ограничивает доступные свойства чтобы уберечь вас от неприятностей, когда ваш ввод поступает из внешних источников.
Я думаю где-то в stackoverflow Я видел такое решение . В любом случае это может выглядеть так:
class ValidationRule:
__allowed = ("other", "same", "different")
def __init__(self, **kwargs):
for k, v in kwargs.iteritems():
assert( k in self.__class__.__allowed )
setattr(self, k, v)
Этот класс будет принимать только аргументы с именами атрибутов из белого списка, перечисленных в __ allowed
.
class ValidationRule:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
Вы можете установить аргументы kwargs
, обновив атрибут __ dict __
экземпляра.
class ValidationRule:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
Вы можете сделать что-то вроде этого:
class ValidationRule:
def __init__(self, **kwargs):
for (k, v) in kwargs.items():
setattr(self, k, v)