Шаг 75.
Python: тонкости программирования. Классы и ООП. Чем полезны именованные кортежи. Создание производных от namedtuple подклассов

    На этом шаге мы рассмотрим особенности создания таких подклассов.

    Поскольку объекты namedtuple строятся поверх обычных классов Python, вы даже можете добавлять в них методы. Например, подобно любому другому классу, вы можете расширить класс namedtuple и таким образом добавить в него методы и новые свойства. Приведем пример:

>>> Car = namedtuple('Авто' , 'цвет пробег')
>>> class MyCarWithMethods(Car):
	def hexcolor(self):
		if self.цвет == 'красный':
			return '#ff0000'
		else:
			return '#000000'

    Теперь можно создавать объекты MyCarWithMethods и, следовательно, вызывать их метод hexcolor():

>>> c = MyCarWithMethods('красный', 1234)
>>> c.hexcolor()
'#ff0000'

    Вместе с тем выглядеть это может слегка неуклюжим. По-видимому, такая возможность пригодится, если вам нужен класс с неизменяемыми свойствами, но здесь есть свои неудобства.

    Например, в добавлении нового неизменяемого поля (immutable field) есть свои сложности из-за внутренней структуры именованных кортежей. Самый легкий способ создать иерархии именованных кортежей - использовать свойство _fields базового кортежа:

>>> Car = namedtuple('Авто', 'цвет пробег')
>>> ElectricCar = namedtuple('ЭлектрическоеАвто', Car._fields + ('заряд',))

    Это дает желаемый результат:

>>> ElectricCar('красный', 1234, 45.0)
ЭлектрическоеАвто(цвет='красный', пробег=1234, заряд=45.0)

    На следующем шаге мы рассмотрим встроенные вспомогательные методы.




Предыдущий шаг Содержание Следующий шаг