"Python - модули, пакеты, классы, экземпляры" - читать интересную книгу автора (Бройтман Олег)

б Ї а ¬Ґва ¬Ё!
Python Ї®§ў®«пҐв ЇҐаҐ®ЇаҐ¤Ґ«Ёвм ўбҐ Ё­дЁЄб­лҐ ®ЇҐа жЁЁ, ЇаЁзҐ¬ ®в¤Ґ«м­®
¤«п «Ґў®Ј® Ё Їа ў®Ј®  аЈг¬Ґ­в  ўла ¦Ґ­Ёп. Ќ ЇаЁ¬Ґа, Ґб«Ё a - нЄ§Ґ¬Ї«па
Є« бб  A, Ё b - нЄ§Ґ¬Ї«па Є« бб  B, в® ¤«п ўлзЁб«Ґ­Ёп ўла ¦Ґ­Ёп a + b ЏЁв®­
Ўг¤Ґв б­ з «  ЁбЄ вм ¬Ґв®¤ __add__ ў Є« бᥠA,   Ґб«Ё ­Ґ ­ ©¤Ґв - в® ¬Ґв®¤
__radd__ ў Є« бᥠB (  Ґб«Ё Ё в ¬ ­Ґ ­ ©¤Ґв - ў®§Ўг¤Ёв ЁбЄ«о祭ЁҐ
TypeError).
Њ­®ЈЁҐ Їа®Ја ¬¬Ёбвл, ®б®ЎҐ­­® ЇЁб ўиЁҐ ­  C++, Ў®пвбп Ё ­Ґ «оЎпв
¬­®¦Ґб⢥­­®Ј® ­ б«Ґ¤®ў ­Ёп. Ђўв®ал п§лЄ  Java ў®®ЎйҐ ­Ґ ўЄ«озЁ«Ё
¬­®¦Ґб⢥­­®Ґ ­ б«Ґ¤®ў ­ЁҐ ў п§лЄ. ‘®ўҐа襭­® ­ Їа б­®! Python Ї®§ў®«пҐв
ЁбЇ®«м§®ў вм ¬­®¦Ґб⢥­­®Ґ ­ б«Ґ¤®ў ­ЁҐ ўҐбм¬  гбЇҐи­® Ё 㤮Ў­®.
Њ­®¦Ґб⢥­­®Ґ ­ б«Ґ¤®ў ­ЁҐ ®Ў«ҐЈз Ґв ЇҐаҐЁбЇ®«м§®ў ­ЁҐ Є®¤  (code reuse)
ў¬Ґбв® copy/paste-Їа®Ја ¬¬Ёа®ў ­Ёп, зв® ®зҐ­м ў ¦­® Ё ¤«п нд䥪⨢­®бвЁ, Ё
¤«п зЁв Ґ¬®бвЁ Їа®Ја ¬¬, Ё ¤«п ®в« ¤ЄЁ. — бв® Їа®Ја ¬¬Ёбвл ­  ЏЁв®­Ґ ᮧ¤ ов
Є« бб б Ї®¬®ймо ¬­®¦Ґб⢥­­®Ј® ­ б«Ґ¤®ў ­Ёп Ё§ ­ҐбЄ®«мЄЁе бўп§ ­­ле ¬Ґ¦¤г
б®Ў®© "ЄЁаЇЁзЁЄ®ў", б«®ў­® Ё§ Є®­бвагЄв®а . ’ ЄЁҐ "ЄЁаЇЁзЁЄЁ" ў
ЋЋ-Їа®Ја ¬¬Ёа®ў ­ЁЁ ­ §лў овбп MixIn-Є« бб ¬Ё. Џ®¤а®Ў­го бв вмо Їа®
Їа®Ја ¬¬Ёа®ў ­ЁҐ б Ї®¬®ймо MixIn-Є« бб®ў ¬®¦­® Їа®зҐбвм ў Linux Journal
…йҐ ®¤Ё­ бЇ®б®Ў ЁбЇ®«м§®ў ­Ёп Є« бб®ў (в®з­ҐҐ, нЄ§Ґ¬Ї«па®ў), ­Ґ
бўп§ ­­л© ­ҐЇ®б।б⢥­­® б ЋЋ-Їа®Ја ¬¬Ёа®ў ­ЁҐ¬ - ЁбЇ®«м§®ў ­ЁҐ
Їа®бва ­бвў  Ё¬Ґ­, Є®в®а®Ґ ЇаҐ¤®бв ў«пҐв ®ЎкҐЄв. ђ бᬮваЁ¬ б«Ґ¤гойго
Їа®Ў«Ґ¬г. ‚ ¬ ­ ¤® Їа®©вЁ жЁЄ«®¬ Ї® бЇЁбЄг, б®еа ­пп ¬Ґ¦¤г ЁвҐа жЁп¬Ё жЁЄ« 
­ҐЄ®в®аго Ё­д®а¬ жЁо. ќв® ¬®¦­® ᤥ« вм жЁЄ«®¬ for, ­ЁЄ ЄЁе Їа®Ў«Ґ¬. Ђ ¬®¦­®
ў®бЇ®«м§®ў вмбп ў®§¬®¦­®бвп¬Ё дг­ЄжЁ®­ «м­®Ј® Їа®Ја ¬¬Ёа®ў ­Ёп, Є®в®алҐ Ґбвм
ў ЏЁв®­Ґ - дг­ЄжЁп¬Ё map, filter, reduce Ё ⮬㠯®¤®Ў­®Ґ. ќвЁ дг­ЄжЁЁ вॡго
ў Є зҐб⢥ ЇҐаў®Ј® Ї а ¬Ґва  дг­ЄжЁо, Є®в®аго ®­Ё ў Їа®жҐбᥠ横«  ўл§лў ов.
ќв® нд䥪⨢­ҐҐ, 祬 жЁЄ« for (нвЁ дг­ЄжЁЁ-в® ­ ЇЁб ­л ­  C), ­® ў®§­ЁЄ Ґв
Їа®Ў«Ґ¬  б еа ­Ґ­ЁҐ¬ б®бв®п­Ёп ¬Ґ¦¤г ЁвҐа жЁп¬Ё. ”г­ЄжЁп, Є®в®аго ўл§лў Ґв
map ¬®¦Ґв еа ­Ёвм б®бв®п­ЁҐ в®«мЄ® ў Ј«®Ў «м­ле ЇҐаҐ¬Ґ­­ле. „«п Їа®бвле
Їа®Ја ¬¬ нв® ўЇ®«­Ґ ЇаЁҐ¬«Ґ¬®. Ќ® ў®в, бЄ ¦Ґ¬, б ¬­®Ј®Ї®в®з­л¬Ё Їа®Ја ¬¬ ¬Ё
Ўг¤гв Їа®Ў«Ґ¬л - ­Ґ®Ўе®¤Ё¬® § ЇЁа вм Ё бЁ­еа®­Ё§Ёа®ў вм ¤®бвгЇ Є Ј«®Ў «м­л¬
ЇҐаҐ¬Ґ­­л¬. „  Ё ў®®ЎйҐ Є Ј«®Ў «м­л¬ ЇҐаҐ¬Ґ­­л¬ ­ ¤® ®Ўа й вмбп в®«мЄ® ЇаЁ
Єа ©­Ґ© ­г¦¤Ґ.
‚®в вгв ­  Ї®¬®йм ЇаЁе®¤Ёв ¤®Ї®«­ЁвҐ«м­®Ґ Їа®бва ­бвў® Ё¬Ґ­,
бгйҐбвўго饥 ў нЄ§Ґ¬Ї«пॠЄ« бб . ‘®§¤ ¤Ё¬ Є« бб
class Process:
def __init__(self):
self.foo = 0

def __call__(self, v):
if self.foo ъ 100:
raise OverflowError
self.foo += v
return self.foo
‘®§¤ ¤Ё¬ нЄ§Ґ¬Ї«па нв®Ј® Є« бб : p = Process(), Ё ЇҐаҐ¤ ¤Ё¬ нв®в ®ЎкҐЄв
ў map ў¬Ґбв® дг­ЄжЁЁ: result = map(p, sequence). ”г­ЄжЁп map, ­ЁзҐЈ® ­Ґ
Ї®¤®§аҐў п, Ўг¤Ґв ўл§лў вм ЇҐаҐ¤ ­­л© Ґ© ®ЎкҐЄв Є Є дг­ЄжЁо б ®¤­Ё¬
Ї а ¬Ґв஬. ЌЁЄ ЄЁе Їа®Ў«Ґ¬ - ¬л в Є ®ЇЁб «Ё Є« бб, зв® ҐЈ® нЄ§Ґ¬Ї«пал ¬®¦­®
ўл§лў вм, Ё Ё¬Ґ­­® б ®¤­Ё¬ Ї а ¬Ґв஬! € ®в ЁвҐа жЁЁ Є ЁвҐа жЁЁ ®ЎкҐЄв p
б®еа ­пҐв ­Ґ®Ўе®¤Ё¬®Ґ б®бв®п­ЁҐ.