>>>> duck = Duck('wide orange', 'long')
>>>> duck
>Duck(bill='wide orange', tail='long')
>>>> duck.bill
>'wide orange'
>>>> duck.tail
>'long'
Именованный кортеж можно сделать также на основе словаря:
>>>> parts = {'bill': 'wide orange', 'tail': 'long'}
>>>> duck2 = Duck(**parts)
>>>> duck2
>Duck(bill='wide orange', tail='long')
В коде, показанном ранее, обратите внимание на конструкцию **parts. Это аргумент — ключевое слово. Он извлекает ключи и значения словаря parts и передает их как аргументы в Duck(). По эффекту это похоже на следующий код:
>>>> duck2 = Duck(bill = 'wide orange', tail = 'long')
Именованные кортежи неизменяемы, но вы можете заменить одно или несколько полей и вернуть другой именованный кортеж:
>>>> duck3 = duck2._replace(tail='magnificent', bill='crushing')
>>>> duck3
>Duck(bill='crushing', tail='magnificent')
Мы могли бы объявить duck как словарь:
>>>> duck_dict = {'bill': 'wide orange', 'tail': 'long'}
>>>> duck_dict
>{'tail': 'long', 'bill': 'wide orange'}
Вы можете добавить поля в словарь:
>>>> duck_dict['color'] = 'green'
>>>> duck_dict
>{'color': 'green', 'tail': 'long', 'bill': 'wide orange'}
Но не в именованный кортеж:
>>>> duck.color = 'green'
>Traceback (most recent call last):
>··File "", line 1, in
>AttributeError: 'dict' object has no attribute 'color'
Вспомним плюсы использования именованного кортежа.
• Они выглядят и действуют как неизменяемый объект.
• Они более эффективны, чем объекты, с точки зрения времени и занимаемого места.
• Вы можете получить доступ к атрибутам с помощью точки вместо квадратных скобок, характерных для словарей.
• Вы можете использовать их как ключ словаря.
1. Создайте класс, который называется Thing, не имеющий содержимого, и выведите его на экран. Затем создайте объект example этого класса и также выведите его. Совпадают ли выведенные значения?
2. Создайте новый класс с именем Thing2 и присвойте его атрибуту letters значение 'abc'. Выведите на экран значение атрибута letters.
3. Создайте еще один класс, который, конечно же, называется Thing3. В этот раз присвойте значение 'xyz' атрибуту объекта, который называется letters. Выведите на экран значение атрибута letters. Понадобилось ли вам создавать объект класса, чтобы сделать это?
4. Создайте класс, который называется Element, имеющий атрибуты объекта name, symbol и number. Создайте объект этого класса со значениями 'Hydrogen', 'H' и 1.
5. Создайте словарь со следующими ключами и значениями: 'name': 'Hydrogen', 'symbol': 'H', 'number': 1. Далее создайте объект с именем hydrogen класса Element с помощью этого словаря.