Инициализация объекта 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"]
Другие вопросы по тегам