Инициализация объекта Python только с аргументами ключевых слов
Мне интересно, как инициализировать объект в Python только с именованными аргументами, и ничего больше, если это возможно.
Если порядок self.name = name и self.age = age поменялся местами, ошибка связана с инициализацией age. Я дал их в качестве аргументов ключевого слова к объекту, так почему этого недостаточно? Я видел класс в погружении в python, созданный с явно названными аргументами ключевых слов и их значением по умолчанию (filename=None), поэтому я предположил, что **kwargs тоже подойдет. Спасибо
2 ответа
Решение
Что вы упускаете, так это то, что kwargs нужно явно извлекать по имени. Вот модифицированная версия вашего кода, чтобы проиллюстрировать. Обратите внимание на инициализацию name
а также age
,
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
# you'll probably want to check that all required
# members were initialized.
bob = Person(name='bob', age=45)
print bob
print bob.age
Выход:
<__main__.Person object at 0x1074e0bd0>
45
kwargs
это словарь Так что лучше сделать это:
class Person(object):
def __init__(self, **kwargs):
self.name = kwargs["name"]
self.age = kwargs["age"]