Б41 Чистый Python. Тонкости программирования для профи. Спб.: Питер



Download 6,94 Mb.
Pdf ko'rish
bet42/80
Sana24.02.2022
Hajmi6,94 Mb.
#212875
1   ...   38   39   40   41   42   43   44   45   ...   80
Bog'liq
978544610803 Chisty Python Tonko

# Мы снова забыли объявить bar()...
1
См. документацию Python «Модуль abc»: 
https://docs .python .org/3/library/abc .html


128 Глава 4 • Классы и ООП
Этот фрагмент кода по-прежнему ведет себя так, как нужно, и создает 
правильную иерархию классов:
assert issubclass(Concrete, Base)
С другой стороны, мы здесь получаем еще одно преимущество. Подклас-
сы 
Base
вызывают исключение 
TypeError
во время создания экземпляра 
всякий раз, когда мы забываем реализовать какие-либо абстрактные 
методы. Вызванное исключение говорит о том, какой метод или методы 
отсутствуют:
>>> c = Concrete()
TypeError:
 "Can't instantiate abstract class Concrete with abstract methods bar"
Без модуля 
abc
мы получали бы только исключение 
NotImplementedError
в случае фактического вызова отсутствующего метода. Возможность 
получать уведомления об отсутствующих методах во время создания эк-
земпляра является большим преимуществом. В результате написание не-
допустимых подклассов в значительной степени блокируется. Возможно, 
этот факт не сыграет какой-то особой роли, если вы пишете новый код, но 
обещаю, что спустя несколько недель или месяцев он станет полезным.
Безусловно, этот шаблон не является полной заменой проверки типов во 
время компиляции. Однако я обнаружил, что он часто делает иерархии 
классов более прочными и более удобными в сопровождении. Использо-
вание абстрактных классов позволяет программисту четче формулировать 
свой замысел и таким образом делает код более коммуникативным. Я ре-
комендую вам почитать документацию по модулю 
abc
и присмотреться 
к ситуациям, где применение этого шаблона имеет смысл.
Ключевые выводы
‰
‰
Абстрактные классы (АК) следят за тем, чтобы производные классы 
реализовывали те или иные методы базового класса во время создания 
экземпляра.
‰
‰
Применение АК помогает избежать ошибок и сделать иерархии клас-
сов более легкими в сопровождении.


4 .6 . Чем полезны именованные кортежи 129
4 .6 . Чем полезны именованные кортежи
Python поставляется со специализированным контейнерным типом 
namedtuple
, то есть именованным кортежем. И этот тип, по всей видимо-
сти, не привлекает того внимания, которое он заслуживает. Именованный 
кортеж представляет собой одно из тех удивительных функциональных 
средств языка Python, которое спрятано у всех на виду.
Именованные кортежи могут быть отличной альтернативой определению 
класса вручную, и у них есть некоторые другие интересные свойства, 
с которыми я хочу вас познакомить в этом разделе.
Итак, что же такое именованный кортеж и в чем проявляется его ис-
ключительность? Именованные кортежи лучше всего представить как 
расширение встроенного типа данных 
tuple
.
Кортежи Python — это простая структура данных, предназначенная для 
группирования произвольных объектов. Кроме того, кортежи не могут 
изменяться — после их создания их нельзя изменять. Ниже приведен 
короткий пример:
>>> tup = ('привет', object(), 42) 
>>> tup 
('привет', , 42) 
>>> tup[2] 
42 
>>> tup[2] = 23 
TypeError: 
"'tuple' object does not support item assignment" 
Оборотной стороной простых кортежей является то, что данные, которые 
вы в них храните, могут быть извлечены только адресацией посредством 
целочисленных индексов. Вы не можете назначать имена отдельным свой-
ствам, хранящимся в кортеже. А это может повлиять на удобочитаемость 
программного кода.
Кроме того, кортеж всегда является вспомогательной структурой. Трудно 
гарантировать, что у двух кортежей будет одно и то же количество полей 
и одинаковые хранящиеся в них свойства. В результате появляется воз-
можность беспрепятственно вносить ошибки «по недоразумению», просто 
перепутав порядок следования полей.


130 Глава 4 • Классы и ООП
Именованные кортежи спешат на помощь
Именованные кортежи призваны решать эти две проблемы.
В первую очередь именованные кортежи являются неизменяемыми 
контейнерами, точно так же, как обычные кортежи. Поместив данные 
в атрибут верхнего уровня в именованном кортеже, вы не сможете его 
модифицировать путем обновления этого атрибута. Все атрибуты объекта 
namedtuple
подчиняются принципу «однократная запись, многократное 
чтение».
Помимо этого, контейнеры типа 
namedtuple
являются, скажем так, име-

Download 6,94 Mb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish