Π£ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс: Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс Π½Π° Новый Π³ΠΎΠ΄ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² Π Π°Π·Π½ΠΎΠ΅
/
29 Ноя 1979

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс Π½Π° Новый Π³ΠΎΠ΄ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ

Новый Π³ΠΎΠ΄ – это самый нарядный ΠΈ яркий ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊ Π² Π³ΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ особСнно Π»ΡŽΠ±ΡΡ‚ Π΄Π΅Ρ‚ΠΈ. Π’ ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ Π·ΠΈΠΌΠ½ΠΈΡ… ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΎΠ² всС Π²ΠΎΠΊΡ€ΡƒΠ³ прСобраТаСтся: ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹, ΠΊΠ°Ρ„Π΅, улицы…

Π’ школС Π΄Π΅Ρ‚ΠΈ проводят Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ своСго дня, поэтому Π΄Π°Π½Π½ΠΎΠΌΡƒ завСдСнию стоит ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ всС Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ нашСм ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ собрали Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ с Ρ„ΠΎΡ‚ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΡˆΠΊΠΎΠ»Ρƒ Π² сказочный Π·Π°ΠΌΠΎΠΊ, Π³Π΄Π΅ Ρ†Π°Ρ€ΠΈΡ‚ Π΄ΡƒΡ… Нового Π³ΠΎΠ΄Π° ΠΈ РоТдСства.

ΠžΠ±Ρ‰ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ ΡˆΠΊΠΎΠ»Ρ‹ ΠΊ Новому Π³ΠΎΠ΄Ρƒ

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΅Π»ΠΊΡƒ. Π•Π»ΠΊΠ° – это Π³Π»Π°Π²Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈ символ Нового Π³ΠΎΠ΄Π°, поэтому ΠΊ Π΅Π΅ Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ со всСй ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² школС ставят ΠΎΠ΄Π½Ρƒ Π³Π»Π°Π²Π½ΡƒΡŽ Π΅Π»ΠΊΡƒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ…ΠΎΠ»Π»Π΅ ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΌ Π·Π°Π»Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎ ТСланию Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΡƒΠΊΡ€Π°ΡˆΠ°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π»ΠΊΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС. ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² яркоС школьноС событиС для всСх Π΄Π΅Ρ‚Π΅ΠΉ. МоТно Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ задания ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΏΠΎ созданию Π΅Π»ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ΡƒΡˆΠ΅ΠΊ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ² внСс свою Π»Π΅ΠΏΡ‚Ρƒ Π² ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ. Π’Π°ΠΆΠ½ΠΎ! Для ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ пластиковыС, дСрСвянныС ΠΈΠ»ΠΈ Ρ‚Π΅ΠΊΡΡ‚ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΈ, Π½ΠΎ Π½Π΅ стСклянныС. Π•Π»ΠΊΠ° станСт мСстом притяТСния для ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² ΠΈ Π΄Π΅Ρ‚ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ случайно Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ ΠΈΠ· стСкла. Для класса Π»ΡƒΡ‡ΡˆΠ΅ всСго Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π΅Π»ΠΊΡƒ Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‚ΠΎΡ€Π° ΠΌΠ΅Ρ‚Ρ€Π° Π² высоту, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π»Π° слишком ΠΌΠ½ΠΎΠ³ΠΎ мСста, Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Π»Π° Π΄Π΅Ρ‚Π΅ΠΉ ΠΎΡ‚ занятий ΠΈ Π½Π΅ мСшала ΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρƒ. К ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡŽ классной Π΅Π»ΠΊΠΈ совСтуСм ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ самих Π΄Π΅Ρ‚Π΅ΠΉ. ΠŸΡƒΡΠΊΠ°ΠΉ Π½Π° ΡƒΡ€ΠΎΠΊΠ°Ρ… Ρ‚Ρ€ΡƒΠ΄Π° ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ искусства ΠΎΠ½ΠΈ мастСрят Π΅Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈ украсят ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π΅Π»ΠΊΡƒ для Нового Π³ΠΎΠ΄Π° Π² школС. Π£ нас Π΅ΡΡ‚ΡŒ искусствСнныС Π΅Π»ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Ρ„ΠΎΡ€ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ классичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²Π·ΡΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΡΠΊΡƒΡŽ Π΅Π»ΠΊΡƒ с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ Π΄Π΅ΠΊΠΎΡ€ΠΎΠΌ.

  • Π‘ΠΈΠΌΠ²ΠΎΠ» Нового Π³ΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Π³Π°ΠΌΠΌΡƒ ΠΈ символику прСдстоящСго Π³ΠΎΠ΄Π°.

  • ΠžΠ±Ρ‰Π΅Π΅ Π΄Π΅Π»ΠΎ. Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ максимально ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π΅Ρ‚Π΅ΠΉ ΠΊ процСссу оформлСния ΡˆΠΊΠΎΠ»Ρ‹ ΠΈ классов Π½Π° Новый Π³ΠΎΠ΄. БовмСстная Ρ€Π°Π±ΠΎΡ‚Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ сплачиваСт Π΄Π΅Ρ‚Π΅ΠΉ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠΌ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

  • Школьная Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ классы (класс Ρ…ΠΈΠΌΠΈΠΈ, класс английского языка, класс истории) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ, примСняя спСцифику ΡƒΡ€ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΌ прСподаСтся. НапримСр, для Π΄Π΅ΠΊΠΎΡ€Π° класса английского языка ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ английскиС ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Π³Π°ΠΌΠΌΡƒ, Π° Π² классС Ρ…ΠΈΠΌΠΈΠΈ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π΅Π»ΠΊΡƒ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ с названиями химичСских элСмСнтов.

  • ВозрастныС особСнности. Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ возраст ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ стилистики для оформлСния классов ΠΊ Новому Π³ΠΎΠ΄Ρƒ. Π”Π΅Ρ‚ΠΈ ΠΈΠ· ΡΡ‚Π°Ρ€ΡˆΠΈΡ… классов, скорСС всСго захотят ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ пространство Π±ΠΎΠ»Π΅Π΅ сдСрТанно ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ младшСклассникам ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ яркиС сочСтания Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΎΠ±ΠΈΠ»ΠΈΠ΅ сказочных пСрсонаТСй ΠΈ Ρ‚.Π΄.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ ΠΊ Новому Π³ΠΎΠ΄Ρƒ ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Ρ‹ ΠΈ Ρ„ΠΎΠΉΠ΅ ΡˆΠΊΠΎΠ»Ρ‹

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ„ΠΎΠΉΠ΅ ΠΈ ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Ρ‹ – это просторныС пространства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ врСмя ΠΏΡƒΡΡ‚ΡƒΡŽΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Новым Π³ΠΎΠ΄ΠΎΠΌ ΠΈΡ… Π½ΠΈΠΊΠ°ΠΊ нСльзя ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π½ΠΈΡ… особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

ΠšΠΎΡ€ΠΈΠ΄ΠΎΡ€Ρ‹ всС-Ρ‚Π°ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свою ΠΏΡ€ΡΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π΅ΠΉ ΠΊ классам, поэтому ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠΎΡ€ Π½Π΅ мСшал ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡŽ людСй. АкцСнт Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° стСны ΠΈ ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ.

Π‘Ρ‚Π΅Π½Ρ‹ для Нового Π³ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ дСтскими Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΌΠΈ рисунками ΠΈ стСнгазСтами, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ² ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Ρ‹ Π² выставочноС пространство. На ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ ΠΏΠΎΠ²Π΅ΡΡŒΡ‚Π΅ гирлянды ΠΈΠ»ΠΈ Π»Π΅Π³ΠΊΠΈΠ΅ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π½Π° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ лСскС.

Π’ просторном ΠΈ свСтлом Ρ„ΠΎΠΉΠ΅ ΠΊΡ€Π΅Π°Ρ‚ΠΈΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² ΠΈ ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Новым Π³ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ силу. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ сразу нСсколько Π·ΠΎΠ½:

  • Π€ΠΎΡ‚ΠΎΠ·ΠΎΠ½Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ красиво новогоднюю Ρ„ΠΎΡ‚ΠΎΠ·ΠΎΠ½Ρƒ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ дСрСвянныС Ρ€Π΅ΠΉΠΊΠΈ, Π³Π²ΠΎΠ·Π΄ΠΈ ΠΈ ΠΏΠΈΠ»ΠΊΠ°. Из этих простых Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π²Ρ‹ смоТСтС ΡΠΎΠΎΡ€ΡƒΠ΄ΠΈΡ‚ΡŒ каркас для Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Ρ„ΠΎΡ‚ΠΎΠ·ΠΎΠ½Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ ΠΈΠ· тСкстиля ΠΈΠ»ΠΈ Π±ΡƒΠΌΠ°Π³ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΎΡ‚ΠΎΠ·ΠΎΠ½Π° для Нового Π³ΠΎΠ΄Π° выглядСла красиво ΠΈ нарядно, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΡ‹ΡˆΠ½Ρ‹ΠΌΠΈ гирляндами ΠΈΠ· Ρ…Π²ΠΎΠΈ, ΡˆΠ°Ρ€ΠΈΠΊΠ°ΠΌΠΈ, ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ тСматичСскими элСмСнтами. На ΠΏΠΎΠ»Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π”Π΅Π΄Π° ΠΌΠΎΡ€ΠΎΠ·Π° ΠΈ Π‘Π½Π΅Π³ΡƒΡ€ΠΎΡ‡ΠΊΠΈ, снСговиков, ΠΎΠ»Π΅Π½Π΅ΠΉ ΠΈ Ρ‚.Π΄.

  • Выставка ΠΏΠΎΠ΄Π΅Π»ΠΎΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π·Π° мСсяц Π΄ΠΎ Нового Π³ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ конкурс Π½Π° Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΅Π»ΠΊΡƒ. ΠŸΡƒΡΠΊΠ°ΠΉ Π΄Π΅Ρ‚ΠΈ приносят рисунки, Ρ„ΠΈΠ³ΡƒΡ€ΠΊΠΈ, ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΈ, сдСланныС своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΈ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΡ… Π² условлСнной Π·ΠΎΠ½Π΅. Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ выставочныС столы Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² Ρ…ΠΎΠ»Π»Π΅, дСтскоС творчСство увидят ΠΌΠ½ΠΎΠ³ΠΎ людСй.

  • ВСматичСская инсталляция. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π΅Π»ΠΊΠΈ Π² Ρ„ΠΎΠΉΠ΅, Ссли позволяСт пространство, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Π°Π»Π»ΡΡ†ΠΈΡŽ с Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈΠ»ΠΈ роТдСствСнскими пСрсонаТами. Π‘Π°ΠΌΠΎΠ΅ простоС – это ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΈΡƒΠΌ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΎΠΊ ΠΈΠ»ΠΈ Ρ„Π°Π½Π΅Ρ€Ρ‹, Π½Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π»Ρ‹ΠΌ Π²ΠΎΠΉΠ»ΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ Ρ‚ΠΊΠ°Π½ΡŒΡŽ, ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ искусствСнным снСгом ΠΈ Β«Ρ€Π°Π·Ρ‹Π³Ρ€Π°Ρ‚ΡŒΒ» ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΡƒΡŽ сцСнку. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сцСна Π² лСсу со звСрями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ водят Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄ Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Π»ΠΊΠΈ ΠΈ ΠΏΡ€Π°Π·Π΄Π½ΡƒΡŽΡ‚ Новый Π³ΠΎΠ΄, ΠΈΠ»ΠΈ Π΄Π΅Ρ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ Π΄Π΅Π΄Π° ΠΌΠΎΡ€ΠΎΠ·Π° с ΠΏΠΎΠ΄Π°Ρ€ΠΊΠ°ΠΌΠΈ.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° Ρ„ΠΎΡ‚ΠΎ Π½ΠΈΠΆΠ΅.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ класс ΠΊ Новому Π³ΠΎΠ΄Ρƒ

ΠŸΠΎΠ΄Π±ΠΈΡ€Π°Ρ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΊΠΎΡ€Π° ΠΊ Новому Π³ΠΎΠ΄Ρƒ для школьного класса, Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ прямым ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ помСщСния ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² зимнюю сказку.

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ Π½Π΅ мСшали ΡƒΡ‡Π΅Π±Π½ΠΎΠΌΡƒ процСссу, Π½Π΅ пСрСтягивали Π½Π° сСбя слишком ΠΌΠ½ΠΎΠ³ΠΎ внимания, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ дополняли ΠΈΠ½Ρ‚Π΅Ρ€ΡŒΠ΅Ρ€ класса ΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»ΠΈ настроСниС ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°ΠΌ.

Окна

Окна – это ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€Π΅Π°Ρ‚ΠΈΠ²Π°. Π•ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ красиво ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΎΠΊΠ½Π° Π² школьном классС:

  • Гирлянды. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ быстрый способ – ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π½Π° ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠΆΠ΄ΠΈΠΊ ΠΈΠ΄ΠΈ ΡΠ²Π΅Ρ‚ΠΎΠ΄ΠΈΠΎΠ΄Π½ΡƒΡŽ гирлянду. Однако, выбирая послСдний способ, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ³Π°ΡŽΡ‰ΠΈΠ΅ Π»Π°ΠΌΠΏΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°Ρ… ΠΈΠ»ΠΈ послС ΡƒΡ€ΠΎΠΊΠΎΠ². Π’ΠΎ врСмя занятий ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ².

  • Π‘Π½Π΅ΠΆΠΈΠ½ΠΊΠΈ. Π‘Π°ΠΌΡ‹ΠΉ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΈ испытанный Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ ΠΎΠΊΠΎΠ½. Π”Π΅Ρ‚ΠΈ сами своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ мноТСство снСТинок Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², Π° взрослыС ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ красиво ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΈΠΌΠΈ стСкло.

  • Роспись. Π‘Ρ‚Π΅ΠΊΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Ρ‚ΡŒ смСсью Π³ΡƒΠ°ΡˆΠΈ ΠΈ Π·ΡƒΠ±Π½ΠΎΠΉ пасты. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΡƒΠ΄ΠΎΠ±Π΅Π½ Π² использовании, Π° послС Нового Π³ΠΎΠ΄Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡΠΌΡ‹Ρ‚ΡŒ Π²ΠΎΠ΄ΠΎΠΉ. Π’ ΠΌΠ»Π°Π΄ΡˆΠΈΡ… классах Ρ€ΠΎΡΠΏΠΈΡΡŒΡŽ ΠΎΠΊΠΎΠ½ красками Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ занялись взрослыС (ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ). Π’ ΡΡ‚Π°Ρ€ΡˆΠΈΡ… классах Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ самим дСтям.

На Ρ„ΠΎΡ‚ΠΎ Π½ΠΈΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ красивого оформлСния ΠΎΠΊΠΎΠ½ Π² классС ΠΊ Новому Π³ΠΎΠ΄Ρƒ.

Π”Π²Π΅Ρ€ΠΈ

Π”Π²Π΅Ρ€ΡŒ класса ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ роТдСствСнским Π²Π΅Π½ΠΊΠΎΠΌ. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ вызовСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ. К слову, Π²Π΅Π½ΠΎΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ слоТно ΡΠΌΠ°ΡΡ‚Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΆΠΈΠ²Ρ‹Π΅ Ρ…Π²ΠΎΠΉΠ½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ. НСбольшиС Π΅Π»ΠΎΠ²Ρ‹Π΅ ΠΈΠ»ΠΈ сосновыС Π²Π΅Ρ‚ΠΎΡ‡ΠΊΠΈ достаточно сплСсти ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π±Π΅Ρ‡Π΅Π²ΠΊΠΎΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠΎΠ»ΡŒΡ†Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π΅ΡΡ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅ Π»Π΅Π½Ρ‚Π°ΠΌΠΈ, искусствСнными ягодами, ΡˆΠ°Ρ€Π°ΠΌΠΈ, шишками ΠΈ Ρ‚.Π΄.

ΠŸΠΎΡ‚ΠΎΠ»ΠΎΠΊ

Для школьного Π΄Π΅ΠΊΠΎΡ€Π° ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ° ΠΊ Новому Π³ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹:

  • Π’ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€Ρ‹. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡˆΠ°Ρ€Ρ‹ подходящСй Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π³Π°ΠΌΠΌΡ‹ (красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, Π·ΠΎΠ»ΠΎΡ‚ΠΎΠΉ, Π±Π΅Π»Ρ‹ΠΉ, синий, сСрСбристый Ρ†Π²Π΅Ρ‚Π°) ΠΈ Ρ€Π°Π·Π²Π΅ΡΡŒΡ‚Π΅ ΠΈΡ… нСбольшими Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΏΠΎ Ρ‚Ρ€ΠΈ ΡˆΠ°Ρ€Π°Β  ΠΏΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠΎΠΌ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Ρ€Ρ‹ с Π³Π΅Π»ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΡ‡Π΅ΠΌ ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΊ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΡƒ.

  • Π”ΠΎΠΆΠ΄ΠΈΠΊ ΠΈ ΠΌΠΈΡˆΡƒΡ€Π°. Если Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°, всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΡ‚ΡŒ ΠΊ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΆΠ΄ΠΈΠΊΠ°. РазвСшивая Π±Π»Π΅ΡΡ‚ΡΡ‰ΡƒΡŽ ΠΌΠΈΡˆΡƒΡ€Ρƒ, прослСдитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ висСла слишком Π½ΠΈΠ·ΠΊΠΎ ΠΈ Π½Π΅ мСшала ΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρƒ ΠΏΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.

  • Π‘Π°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ гирлянды. Когда Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠ°Ρ…, Ρ‚ΠΎ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€, сдСланный Ρ€ΡƒΠΊΠ°ΠΌΠΈ Π΄Π΅Ρ‚Π΅ΠΉ, всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠΊΡƒΠΏΠ½ΠΎΠ³ΠΎ, вСдь Π² Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ сконцСнтрировано стараниС ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², атмосфСра ΠΊΡ€Π΅Π°Ρ‚ΠΈΠ²Π° ΠΈ Π΄ΡƒΡˆΠ΅Π²Π½ΠΎΡΡ‚ΡŒ. Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ гирлянды, Ρ‚ΠΎ самый простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – это гирлянда-Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°. Π•Π΅ смогут ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса. Π’Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΈ быстро создаСтся гирлянда Π² Ρ„ΠΎΡ€ΠΌΠ΅ спирали (Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ ΠΈ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠΏΠΈΡ€Π°Π»ΡŒ, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡŒ Π½ΠΎΠΆΠ½ΠΈΡ†Π°ΠΌΠΈ ΠΎΡ‚ края ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ).

Доска

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ°, ΠΎΠΊΠΎΠ½ ΠΈ Π΄Π²Π΅Ρ€ΠΈ, школьная доска всСгда находится Π² ΠΏΠΎΠ»Π΅ зрСния всСх ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ². Π£ΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ доску Π½ΡƒΠΆΠ½ΠΎ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ярких ΠΈ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Π°ΠΊΡ†Π΅Π½Ρ‚ΠΎΠ². Π›ΡƒΡ‡ΡˆΠ΅ всСго Π½Π° нСбольшоС Π΅Π΅ части Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Π»ΠΎΠΌ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠ΅ для всСх ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ школьникам самим Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поТСлания ΠΈ поздравлСния с Новым Π³ΠΎΠ΄ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ доску ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π΄ΠΎΠΆΠ΄ΠΈΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ стСнгазСту.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ фасад Π² школС ΠΊ Новому Π³ΠΎΠ΄Ρƒ

ΠŸΠ°Ρ€Π°Π΄Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ – это Π»ΠΈΡ†ΠΎ любой ΡˆΠΊΠΎΠ»Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ всСм посСтитСлям ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ настрой Π΅Ρ‰Π΅ Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌΡƒ завСдСнию, Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ фасад здания ΠΈ ΠΏΡ€ΠΈΠ»Π΅Π³Π°ΡŽΡ‰ΡƒΡŽ Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π²ΠΎ Π΄Π²ΠΎΡ€Π΅ ΡˆΠΊΠΎΠ»Ρ‹ растСт Тивая Сль. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свСтодиодными гирляндами ΠΈ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°ΠΌΠΈ.

Над Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Π·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ»Π°ΠΊΠ°Ρ‚ Β«Π‘ Новым Π³ΠΎΠ΄ΠΎΠΌΒ» ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΈ Π·Π²ΡƒΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

На ΠΏΠΎΡ€ΠΎΠ³Π΅ установитС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π”Π΅Π΄Π° ΠœΠΎΡ€ΠΎΠ·Π°, снСговиков, ΠΎΠ»Π΅Π½Π΅ΠΉ, ΡΠ»ΡŒΡ„ΠΎΠ², Π‘Π½Π΅Π³ΡƒΡ€ΠΎΡ‡ΠΊΠΈ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈΠ· Ρ„Π°Π½Π΅Ρ€Ρ‹ ΠΈ Ρ€Π°Π·ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π°ΠΊΡ€ΠΈΠ»ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ масляными красками.

ΠŸΠ΅Ρ€ΠΈΠ»Π° Π½Π° ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠ°Ρ… ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ гирляндой ΠΈΠ· искусствСнной Ρ…Π²ΠΎΠΈ.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π΄Π΅Ρ‚Π΅ΠΉ сказку Π½Π° Новый Π³ΠΎΠ΄ Π² школС совсСм Π½Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ ΠΏΠΎ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Ρƒ. Π“Π»Π°Π²Π½ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΡŽ, ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ ΠΊ процСссу ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Π½Π΅Ρ€Π°Π²Π½ΠΎΠ΄ΡƒΡˆΠ½Ρ‹Ρ… людСй ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π·Π° нСсколько Π΄Π½Π΅ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Π°ΡˆΠΈΡ… Π΄Π΅Ρ‚Π΅ΠΉ прСвратится Π² волшСбноС мСсто, ΠΊΡƒΠ΄Π° ΠΈΠΌ захочСтся ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь.

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса ΠΊ 1 сСнтября. Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс?

Π”Π΅Π½ΡŒ Π—Π½Π°Π½ΠΈΠΉ – это Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΠΎΠ΅ событиС для пСрвоклассников ΠΈ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, отвСтствСнноС для ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ администрации ΡˆΠΊΠΎΠ»Ρ‹. К 1 сСнтября всС ΡˆΠΊΠΎΠ»Ρ‹ ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΡƒΡŽ ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠΊΡƒ, ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»Ρƒ ΠΈ классы ΠΊ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Ρƒ своих ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ².

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для вас ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс ΠΊ 1 сСнтября своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ класса Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹ΠΌΠΈ ΡˆΠ°Ρ€Π°ΠΌΠΈ.

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса ΠΊ 1 сСнтября ΡˆΠ°Ρ€Π°ΠΌΠΈ

Π’ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ – это ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Π½Π΅ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» для создания атмосфСры ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠ° ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ. ИмСнно поэтому Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€Ρ‹ Ρ‚Π°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΎΠ², ΠΈ дСтскиС мСроприятия Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Из Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Ρ… ΡˆΠ°Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΡ€ΡƒΠΆΠ°Ρ‚ΡŒ слоТныС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΊΠ»Π°ΡˆΠΊΠΈ, Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Π±ΡƒΠΊΠ²Ρ‹, Ρ€Π°Π΄ΡƒΠ³Π°, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π³Π΅Ρ€ΠΎΠΈ ΠΈ Ρ‚.ΠΏ. Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ школьного класса ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Если Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ, Π½Π°Π΄ΡƒΡ‚Ρ‹Π΅ Π³Π΅Π»ΠΈΠ΅ΠΌ, Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, ваш ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ΅Π½. Достаточно просто ΠΏΠΎΠ΄Π²ΡΠ·Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π³Π΅Π»ΠΈΠ΅Π²ΠΎΠΌΡƒ ΡˆΠ°Ρ€ΠΈΠΊΡƒ ΠΊ стулу ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Ρ‚Π΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ высотС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс засиял Π½ΠΎΠ²Ρ‹ΠΌΠΈ красками.Β  Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊΠΈ с надписями ΠΈ рисунками. По ΡΠ»ΡƒΡ‡Π°ΡŽ празднования 1 сСнтября ΠΎΡ‡Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ смотрятся ΡˆΠ°Ρ€ΠΈΠΊΠΈ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ вСсСлых ΠΌΠΎΡ€Π΄Π°ΡˆΠ΅ΠΊ ΠΈ осСнних Π»ΠΈΡΡ‚ΡŒΠ΅Π².

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π°Π΄ΡƒΠ²Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Ρ‹. Бтоят Ρ‚Π°ΠΊΠΈΠ΅ Ρ†Π²Π΅Ρ‚Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ Π΄ΠΎΡ€ΠΎΠ³ΠΎ. И, кстати говоря, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠΎΠ½Π°Π΄ΠΎΠ±ΡΡ‚ΡΡ лишь: насос ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ для модСлирования. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ мастСр класс ΠΏΠΎ созданию Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ΠΎ.

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Ρ‹ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ€Ρ‚Π°Ρ….

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹ΠΌΠΈ ΡˆΠ°Ρ€ΠΈΠΊΠ°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ Π΄Π²Π΅Ρ€ΡŒ Π² ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс. МоТно просто ΠΏΠΎΠ΄Π²Π΅ΡΠΈΡ‚ΡŒ Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ½ΡƒΡŽ гирлянду.

Β 

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ доску ΠΊ 1 сСнтября?

Школьная доска ΠΊ 1 сСнтября ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·Π»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ΅ настроСниС. Если ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ Π²Π»Π°Π΄Π΅Π΅Ρ‚ худоТСствСнными Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ доску рисунками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нанСсти ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π»Π°.

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса ΠΊ 1 сСнтября Π² 11 классС своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – это Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ тСматичСскиС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈ ΠΏΠ»Π°ΠΊΠ°Ρ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ школьной доскС.

ΠœΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π’Π°ΠΌ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΡΡ€ΠΊΡƒΡŽ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°ΡΠΈΠ²ΡƒΡŽ надпись Β«1 сСнтября β€” Π”Π΅Π½ΡŒ Π—Π½Π°Π½ΠΈΠΉΒ».

Β 

Β 

Π’Π°ΠΊΠΎΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстро, Π° ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ 1 сСнтября ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³ΠΎΠ΄Π° для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π³ΠΎΠ΄: Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°, Π²ΠΈΠ΄Ρ‹ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ, мастСр класс

Π‘Π°ΠΌΡ‹ΠΉ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ ΠΈ самый радостный дСнь Π² Π³ΠΎΠ΄Ρƒ β€” ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. ОсобСнно ΠΆΠ΄ΡƒΡ‚ этого дня Π΄Π΅Ρ‚ΠΈ, Ρ€Π°Π΄ΡƒΡΡΡŒ ΠΏΠΎΠ΄Π°Ρ€ΠΊΠ°ΠΌ ΠΈ вСсСлой атмосфСрС. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π·Π΄Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ярким ΠΈ ΠΏΠΎ – настоящСму красочным, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ± ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΈ класса Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π³ΠΎΠ΄ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ. Подобная Π·Π°Π΄Π°Ρ‡Π° придСтся ΠΏΠΎ вкусу школьникам, вСдь ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€ ΠΈ ΠΏΠΎΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² процСссС. Π’ нашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСны ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ создания тСматичСских Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΡ… ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΉ.

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ

Π’Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΉ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π° ΠΈ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Π°. Для подходящСго Π΄Π΅ΠΊΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΈ ΠΈ снСТинки Π½Π° ΠΎΠΊΠ½Π°Ρ…. УмСстным Π±ΡƒΠ΄Π΅Ρ‚ любой нарядный ΠΈΠ½Ρ‚Π΅Ρ€ΡŒΠ΅Ρ€, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΈ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… расцвСток ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ.

ИдСи

ВсС Ρ‚ΠΈΠΏΡ‹ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ условно ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠΊΡƒΠΏΠ½Ρ‹Π΅ ΠΈ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅. ΠŸΡ€ΠΈ этом ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹, ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ подходящий элСмСнт, вСдь Π² Ρ…ΠΎΠ΄ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Π΄Π°ΠΆΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

Как ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹:

  1. Π‘ΡƒΠΌΠ°Π³Π°. Π’Ρ‹Ρ€Π΅Π·Π°Π½ΠΈΠ΅ снСТинок ΠΈ тСматичСского Π΄Π΅ΠΊΠΎΡ€Π°, созданиС ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€, гирлянд ΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚ΠΎΠ² Π½Π° ΠΎΠΊΠ½Π° ΠΈ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ любой подходящСй повСрхности.
  2. Вкань. ΠžΠ±Ρ€Π΅Π·ΠΊΠΈ ΠΏΠΎΠ»ΠΎΡ‚Π΅Π½ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ плотности ΠΈ структуры ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ для создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π΄Π΅ΠΊΠΎΡ€Π°. Π’Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΡŽΠ»Ρ ΠΈ Π³Π°Π·Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Π΅ гирлянды, ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ снСга ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΠΊΠΎΠ².
  3. Нити. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для гирлянд ΠΈ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€. Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс β€” Ρ€Π°Π·Π²Π΅ΡΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π΅Π·Π°Π½Π½Ρ‹Π΅ снСТинки Π½Π° нитях Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚ΠΎΡ€Ρ‹ ΠΈ стСны, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ пространство.
  4. БлСстки, бисСр. ΠŸΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ для создания эффСкта сияния Π½Π° ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ΄Π΅Π»ΠΊΠ°Ρ…. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΡΡ‚ΠΈΠ»ΡŒΠ½ΠΎ смотрятся ΠΏΠΎΠ΄Π²Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ лСскС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ бусинки Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ².

Для изготовлСния ΠΏΠΎΠ΄Π΅Π»ΠΎΠΊ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π³ΠΎΠ΄ своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ понадобится ΠΊΠ»Π΅ΠΉ ΠŸΠ’Π, скотч, Π°ΠΊΡ€ΠΈΠ»ΠΎΠ²Ρ‹Π΅ краски ΠΈΠ»ΠΈ Π³ΡƒΠ°ΡˆΡŒ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΊΠΈ приятно ΠΌΠ°ΡΡ‚Π΅Ρ€ΠΈΡ‚ΡŒ всСй сСмьСй, Π° для школьников Π±ΡƒΠ΄Π΅Ρ‚ умСстным Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠΊΠΎΠ² творчСства.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ Π΄Π²Π΅Ρ€ΡŒ

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ класса ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ обстановки Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ. Для Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΌΠ½ΡƒΡŽ снСТинку, ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ надпись ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΉ Π²Π΅Π½ΠΎΠΊ. Π•Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΠ· ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ². ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ идСя β€” ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π²Π΅Π½ΠΎΠΊ ΠΆΠΈΠ²Ρ‹ΠΌΠΈ шишками, яркими Π±Π°Π½Ρ‚Π°ΠΌΠΈ ΠΈ нСбольшими Π΅Π»ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°ΠΌΠΈ.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ ΠΎΠΊΠ½Π°

ΠžΠΆΠΈΠ²ΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΡŒΠ΅Ρ€ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ снСТники, Π½ΠΎ больший простор для Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ прСдоставят рисунки ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚Ρ‹.

Как выполняСтся процСсс:

  • На стСклС выполняСтся Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° мСста полоТСния основных элСмСнтов. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ надпись («Бчастливого 2021 Π³ΠΎΠ΄Π°Β», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€), рисунков ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΉ;
  • Наносятся самыС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ изобраТСния, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ врСмя ΠΈ ΠΌΠ΅Π»ΠΊΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Рисунки Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π³ΡƒΠ°ΡˆΡŒΡŽ ΠΈΠ»ΠΈ Π°ΠΊΡ€ΠΈΠ»ΠΎΠ²Ρ‹ΠΌΠΈ красками. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСзопасны ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ со стСклянной повСрхности;
  • ΠŸΡ€ΠΈ использовании Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°ΡŽΡ‚ΡΡ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹. Π§Π΅Ρ€Π΅Π· Π½ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ красок наносят рисунки. МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ»Π΅ΠΉ ΠŸΠ’Π, ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ с блСстками. ПослС высыхания ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ станСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ, Π½ΠΎ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ блСском.

Для дСкорирования стСклянной повСрхности ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ с Π²ΠΎΠ΄ΠΎΠΉ Π·ΡƒΠ±Π½ΡƒΡŽ пасту. Для этого Π½Π°Π΄ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ консистСнции густой смСтаны, Π° нанСсСниС «краски» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ старой Π·ΡƒΠ±Π½ΠΎΠΉ Ρ‰Π΅Ρ‚ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠΈΡΡ‚ΡŒΡŽ. ΠšΡΡ‚Π°Ρ‚ΠΈ, с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ составом ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ создания ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, использовав ΠΏΠΈΡ‰Π΅Π²ΠΎΠΉ ΠΊΡ€Π°ΡΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π³ΡƒΠ°ΡˆΡŒ.

Вопрос, ΠΊΠ°ΠΊ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π³ΠΎΠ΄, каТдая школа Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎ – своСму. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ ΠΊ этому процСссу Π΄Π΅Ρ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π·Π°Π½ΡΡ‚ΡŒ ΠΈΠ·Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ нСслоТных ΠΏΠΎΠ΄Π΅Π»ΠΎΠΊ. БущСствуСт мноТСство ΠΈΠ΄Π΅ΠΉ красивого дСкорирования класса, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… финансовых Π·Π°Ρ‚Ρ€Π°Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ слоТностСй Π² исполнСнии.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ интСрСсного Π½Π° нашСм сайтС:

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс ΠΊ Новому Π³ΠΎΠ΄Ρƒ? ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ

Π”Π΅Ρ‚ΠΈ всСх возрастов с Π½Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄ΡƒΡ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΡ… ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΎΠ² – волшСбной ΠΏΠΎΡ€Ρ‹, хрустящСго снСга, ΠΏΠΎΠ΄Π°Ρ€ΠΊΠΎΠ², ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ² ΠΈ Π·ΠΈΠΌΠ½ΠΈΡ… ΠΊΠ°Π½ΠΈΠΊΡƒΠ». Достаточно Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ΅ настроСниС ΠΈ Π² классС. Π’Π°ΠΊ Π’Ρ‹ создадитС Ρƒ Π΄Π΅Ρ‚ΠΎΠΊ ΠΏΡ€Π΅Π΄Π²ΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ волшСбного ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠ° ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ творчСски, вСдь ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ для ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄Ρ€ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всСм классом.

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс ΠΊ Новому Π³ΠΎΠ΄Ρƒ?

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ классов Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ сами учитСля, ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΊΠ»Π°ΡΡΠ½ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΌΠ°ΠΌΡ‹ ΠΈ ΠΏΠ°ΠΏΡ‹ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ². Но Pagremuski.info ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для Вас массу простых ΠΈΠ΄Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΡƒΡ€ΠΎΠΊΠ°Ρ… Ρ‚Ρ€ΡƒΠ΄Π°, ΠΈ ΠΏΡ€ΠΈ этом, Π½Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Π½Π΅Π³ Π½Π° Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΉ Π΄Π΅ΠΊΠΎΡ€.

Новогодняя Слка в классС

Π‘Ρ€Π°Π·Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ стоит Π² классС ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΆΠΈΠ²ΡƒΡŽ Π΅Π»ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° осыпаСтся ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ мусора. Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ стоит ΡƒΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΈΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ новогоднюю красавицу стСклянными Π΅Π»ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΡΡ‚ΡŒ Π²Ρ€Π΅Π΄ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡŽ Π΄Π΅Ρ‚Π΅ΠΉ.

Π›ΡƒΡ‡ΡˆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π΅Π»ΠΎΡ‡ΠΊΡƒ нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π΅Π΅ дСтскими ΠΏΠΎΠ΄Π΅Π»ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π±Π΅Π½ΠΊΠ° принСсти ΠΈΠ· Π΄ΠΎΠΌΠ° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π»ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ΅, это Π½Π΅ понСсСт Π±ΠΎΠ»ΡŒΡˆΠΈΡ… финансовых Π·Π°Ρ‚Ρ€Π°Ρ‚, Π° ваша хвойная красавица ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½Ρ‹ΠΉ блСск.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Π΅Π»ΠΎΡ‡ΠΊΡƒ Π½Π° стол учитСля. РазумССтся, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡƒΠΏΠΈΡ‚ΡŒ, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π΅Ρ‚ΠΊΠ°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ Π½Π° ΡƒΡ€ΠΎΠΊΠ΅ Ρ‚Ρ€ΡƒΠ΄Π°. И Ρƒ ΠΊΠΎΠ³ΠΎ получится самая красивая, Ρ‚Π° ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ стол.

Если мСсто Π² классС Π½Π΅ позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π»ΠΊΡƒ, Ρ‚ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· Π±ΡƒΠΌΠ°Π³ΠΈ ΠΈΠ»ΠΈ гирлянд ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π½Π° ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ доску, Π΄Π²Π΅Ρ€ΡŒ ΠΈΠ»ΠΈ стСну.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ ΠΎΠΊΠ½Π° Π² классС ΠΊ Новому Π³ΠΎΠ΄Ρƒ

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΎΠΊΠ½Π° Π² классной ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅. Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ снСТинки ΠΈΠ· салфСток, бСлоснСТныС ΡƒΠ·ΠΎΡ€Ρ‹ ΠΈΠ· Π·ΡƒΠ±Π½ΠΎΠΉ пасты, Π½Π°ΠΊΠ»Π΅Π΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Ρ„Π°Ρ€Π΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ интСрСсныС ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ стоит Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ± ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠΊΠΎΠ½Π½ΠΈΠΊΠ°. На Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π΅Π»ΠΎΡ‡ΠΊΡƒ, искусствСнныС ΠΏΠΎΠ΄Π°Ρ€ΠΎΡ‡ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°ΡΡ‚Π΅Π»ΠΈΡ‚ΡŒ Ρ…Π»ΠΎΠΏΡŒΡΠΌΠΈ Π²Π°Ρ‚Ρ‹ ΠΈ ΠΌΠΈΡˆΡƒΡ€ΠΎΠΉ.

Если, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π’Π°ΠΌ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΎΠ±ΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅ΡΠΈΡ‚ΡŒ красивыС гирлянды.

БнСговик в школьном классС

Если Π’Ρ‹ устраиваСтС ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹Π΅ сорСвнования, Π½Π° самый Π»ΡƒΡ‡ΡˆΠΈΠΉ Π½ΠΎΠ²ΠΎΠ³ΠΎΠ΄Π½ΠΈΠΉ класс, Ρ‚ΠΎ Π±Π΅ΡΡΠΏΠΎΡ€Π½ΡƒΡŽ ΠΏΠΎΠ±Π΅Π΄Ρƒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ благодаря красивому снСговику ΠΈΠ· пластиковых стаканчиков.

ВсС Ρ‡Ρ‚ΠΎ Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ – это ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π½Π° ΠΎΠΏΡ‚ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ стаканчики ΠΈ вооруТится стСплСром. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ красавца, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ рядом с Π΅Π»ΠΎΡ‡ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ школьной доски. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снСговика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Π²Π΅Ρ€ΡŒ ΠΈΠ»ΠΈ ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ доску.

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½ΡƒΡŽ доску ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ?

ΠšΡΡ‚Π°Ρ‚ΠΈ ΠΎ школьной доскС, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ гирляндами, снСТинками ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ роТдСствСнский Π²Π΅Π½ΠΎΠΊ.

К слову ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅Π½ΠΎΠΊ Π½Π΅ слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π΄Π΅Ρ‚ΡŒΠΌΠΈ, всС, Ρ‡Ρ‚ΠΎ Π’Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ это:

  • ΠšΡƒΡΠΎΠΊ ΠΏΡ€ΠΎΠ²ΠΎΠ»ΠΎΠΊΠΈ ΠΈΠ»ΠΈ вСшалка;
  • Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΈΡ‰Π΅ΠΏΠΎΠΊ;
  • Бусины;
  • Атласная Π»Π΅Π½Ρ‚Π°;
  • ΠšΡ€Π°ΡΠΊΠ°.

Из вСшалки Π΄Π΅Π»Π°Π΅ΠΌ каркас ΠΊΡ€ΡƒΠ³Π»ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π½Π° Π½Π΅Π³ΠΎ цСпляСм ΠΏΡ€ΠΈΡ‰Π΅ΠΏΠΊΠΈ, чСрСдуя с бусинами. ΠŸΡ€ΠΈΡ‰Π΅ΠΏΠΊΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ красим Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚. Когда Π²Π΅Π½ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ², повяТитС красивый Π±Π°Π½Ρ‚ ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ‚Π΅Π»ΡŒΠΊΡƒ.

НадССмся, наш ΠΈΠ΄Π΅ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π’Π°ΠΌ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ класс ΠΊ Новому Π³ΠΎΠ΄Ρƒ.Β  Π”Π°ΠΉΡ‚Π΅ волю своСй Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ ΠΎΡ‚ процСсса ΠΈ Ρ‚ΠΎΠ³Π΄Π° Ρƒ Вас всС получится!

Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс?

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наслСдованиС Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для поставлСнной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π― нашСл этот вопрос Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ классов, спасибо всСм.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², основанных Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ наслСдованиС влияСт Π½Π° Π²Π΅Ρ‰ΠΈ Π² Python 2.7 (ΠΈ @wraps , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚. Π”.):

def dec(klass):
    old_foo = klass.foo
    @wraps(klass.foo)
    def decorated_foo(self, *args ,**kwargs):
        print('@decorator pre %s' % msg)
        old_foo(self, *args, **kwargs)
        print('@decorator post %s' % msg)
    klass.foo = decorated_foo
    return klass

@dec  # No parentheses
class Foo...

Часто Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² свой Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€:

from functools import wraps

def dec(msg='default'):
    def decorator(klass):
        old_foo = klass.foo
        @wraps(klass.foo)
        def decorated_foo(self, *args ,**kwargs):
            print('@decorator pre %s' % msg)
            old_foo(self, *args, **kwargs)
            print('@decorator post %s' % msg)
        klass.foo = decorated_foo
        return klass
    return decorator

@dec('foo decorator')  # You must add parentheses now, even if they're empty
class Foo(object):
    def foo(self, *args, **kwargs):
        print('foo.foo()')

@dec('subfoo decorator')
class SubFoo(Foo):
    def foo(self, *args, **kwargs):
        print('subfoo.foo() pre')
        super(SubFoo, self).foo(*args, **kwargs)
        print('subfoo.foo() post')

@dec('subsubfoo decorator')
class SubSubFoo(SubFoo):
    def foo(self, *args, **kwargs):
        print('subsubfoo.foo() pre')
        super(SubSubFoo, self).foo(*args, **kwargs)
        print('subsubfoo.foo() post')

SubSubFoo().foo()

Π’Ρ‹Ρ…ΠΎΠ΄Ρ‹:

@decorator pre subsubfoo decorator
subsubfoo.foo() pre
@decorator pre subfoo decorator
subfoo.foo() pre
@decorator pre foo decorator
foo.foo()
@decorator post foo decorator
subfoo.foo() post
@decorator post subfoo decorator
subsubfoo.foo() post
@decorator post subsubfoo decorator

Π― использовал Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π’ΠΎΡ‚ класс для ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ класса:

class Dec(object):

    def __init__(self, msg):
        self.msg = msg

    def __call__(self, klass):
        old_foo = klass.foo
        msg = self.msg
        def decorated_foo(self, *args, **kwargs):
            print('@decorator pre %s' % msg)
            old_foo(self, *args, **kwargs)
            print('@decorator post %s' % msg)
        klass.foo = decorated_foo
        return klass

Π‘ΠΎΠ»Π΅Π΅ надСТная вСрсия, которая провСряСт эти скобки ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ классС:

from inspect import isclass

def decorate_if(condition, decorator):
    return decorator if condition else lambda x: x

def dec(msg):
    # Only use if your decorator's first parameter is never a class
    assert not isclass(msg)

    def decorator(klass):
        old_foo = getattr(klass, 'foo', None)

        @decorate_if(old_foo, wraps(klass.foo))
        def decorated_foo(self, *args ,**kwargs):
            print('@decorator pre %s' % msg)
            if callable(old_foo):
                old_foo(self, *args, **kwargs)
            print('@decorator post %s' % msg)

        klass.foo = decorated_foo
        return klass

    return decorator

Π’ assertпровСряСт , Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· скобок. Если Π΄Π°, Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс пСрСдаСтся msgΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ AssertionError.

@decorate_ifпримСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ decoratorСсли ΠΈΠΌΠ΅Π΅Ρ‚ conditionΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ getattr, callabletest ΠΈ @decorate_if, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π½Π΅ сломался, Ссли foo()ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ сущСствуСт Π² Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ классС.

ΠΊ 1 сСнтября, своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, школа, Ρ„ΠΎΡ‚ΠΎ, ΠΊΠΎ Π”Π½ΡŽ учитСля

ОсСнь – врСмя открытия Π½ΠΎΠ²Ρ‹Ρ… сСзонов, Π½Π°Ρ‡Π°Π»ΠΎ ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. Π’ это врСмя Π³ΠΎΠ΄Π° хочСтся Π²ΠΎΠΉΡ‚ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ. ОсСнь Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ яркая сама ΠΏΠΎ сСбС, Ρ‡Ρ‚ΠΎ Π΅Π΅ красочная Π³Π°ΠΌΠΌΠ° – Π±ΡƒΠΊΠ΅Ρ‚Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² всСвозмоТных ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ², ΠΆΠ΅Π»Ρ‚Ρ‹Π΅, красныС, багряныС ΠΈ ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹Π΅ Π»ΠΈΡΡ‚ΡŒΡ – ΡƒΠΆΠ΅ сами ΠΏΠΎ сСбС ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ прСкрасным ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. И всС ΠΆΠ΅, ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ сСнтября ΠΈ Π”Π½ΡŽ учитСля ΠΈΠ½ΠΎΠ³Π΄Π° хочСтся ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎ-особСнному. Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ класс ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΡΠ΅Π½Ρ‚ΡΠ±Ρ€ΡŽ

Π’ΠΎΠΉΡ‚ΠΈ Π² красивый класс Π±ΡƒΠ΄Π΅Ρ‚ вСсСло Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрвоклассникам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³. Но ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΡ… классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ особСнно тяТСло Ρ€Π°ΡΡΡ‚Π°Ρ‚ΡŒΡΡ с Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π»Π΅Ρ‚Π½ΠΈΠΌΠΈ дСньками.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, слСдуСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ мноТСство ярких пятСн. Они ΠΏΡ€ΠΈΠ΄Π°Π΄ΡƒΡ‚ атмосфСрС ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ. Π―Ρ€ΠΊΠΈΠ΅ гирлянды ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π½Π° ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ доску, Π½Π° стСны ΠΈ Π½Π° ΡˆΡ‚ΠΎΡ€Ρ‹. ΠŸΠΎΡΡ‚Π΅Ρ€Ρ‹, рисунки ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ прСобразят стандартныС классныС стСны.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π”Π΅Π½ΡŒ Π·Π½Π°Π½ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ осСнним Π΄Π½Π΅ΠΌ, Ρ‚ΠΎ «осСнняя» Ρ‚Π΅ΠΌΠ°, взятая Π·Π° основу оформлСния класса ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΡΠ΅Π½Ρ‚ΡΠ±Ρ€ΡŽ – это самый Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’Π°ΠΊ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ гирляндами, сдСланными Π² Π²ΠΈΠ΄Π΅ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Ρ… Π»ΠΈΡΡ‚ΡŒΠ΅Π². Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈΠ· простой Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ Π±ΡƒΠΌΠ°Π³ΠΈ, закрСпляя Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ стСТками Π½Π° нитях. Π’Π°ΠΊΠΈΠ΅ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ станут ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡΠΌΠΈ для ΠΎΠΊΠΎΠ½.

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ настСнныС Π³Π°Π·Π΅Ρ‚Ρ‹. ОсобСнно интСрСсным Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌΠ° Π»Π΅Ρ‚Π½Π΅Π³ΠΎ ΠΎΡ‚Π΄Ρ‹Ρ…Π°. Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‡ΡƒΡ‚ΡŒ ΠΎΠ±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ составлСниСм Π³Π°Π·Π΅Ρ‚Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅, ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ школьника ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΈ Π²ΠΎΡ‚, яркий рассказ Π½Π° Ρ‚Π΅ΠΌΡƒ «Как я ΠΏΡ€ΠΎΠ²Π΅Π» Π»Π΅Ρ‚ΠΎΒ» ΡƒΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½. Π›Π΅Ρ‚Π½ΠΈΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ станут прСкрасным ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ΠΌ класса Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π·ΠΈΠΌΠ½ΠΈΡ… ΠΊΠ°Π½ΠΈΠΊΡƒΠ».

Π‘Π΅ΡΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ любого помСщСния – Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚Π΅, ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π½Π° ΠΎΠΊΠ½Π°, ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ доску, ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΊ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΡƒ. Π’ΡƒΡ‚ всС зависит ΠΎΡ‚ финансовых возмоТностСй ΠΈ развития вашСй Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ.

Π£ΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ класс ΠΊΠΎ Π”Π½ΡŽ учитСля

Π­Ρ‚ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊ Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ Π³ΠΎΠ΄Ρƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ»Π°Π½ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², Π° проявлСниС внимания ΠΈ уваТСния ΠΊ ΠΏΠ΅Π΄Π°Π³ΠΎΠ³Π°ΠΌ. Π‘ΡƒΠΊΠ΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ² Π½Π° ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ столС – элСмСнт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΡΠΏΠ°Ρ€ΠΈΠ²Π°Π½ΠΈΡŽ просто Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ – ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ТСланию.

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄Π΅ΠΊΠΎΡ€Π° стСн, классной доски, ΡˆΡ‚ΠΎΡ€ – гирлянды ΠΈΠ· Π»ΠΈΡΡ‚ΡŒΠ΅Π². ΠšΡ€ΠΎΠΌΠ΅ этого, интСрСсным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ станут гирлянды ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΡƒΠΆΠ΅ нСпосрСдствСнно ΠΊ ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Ρ€ΡƒΡ‡ΠΊΠΈ, Π·Π²ΠΎΠ½ΠΊΠΈ, ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠΈ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²Π΅ΡΠΈΡ‚ΡŒ Π² классС.

ВспоминаСм Ρ‚Π΅ ΠΆΠ΅ стСнныС Π³Π°Π·Π΅Ρ‚Ρ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΈΡ… с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ сцСнок ΠΈΠ· школьной ΠΆΠΈΠ·Π½ΠΈ. НС лишним Π±ΡƒΠ΄Π΅Ρ‚ отвСсти чистоС мСсто для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² написал ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСбя.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ надписи Ρ†ΠΈΡ‚Π°Ρ‚ извСстных людСй ΠΎΠ± ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ‚Ρ€ΡƒΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… полосах Π±ΡƒΠΌΠ°Π³ΠΈ. Π Π°Π·Π²Π΅ΡΠΈΡ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π΄ доской, Π½Π° стСнах, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π°Ρ….

Π¨ΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΏΠΎΠ·Π΄Ρ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΊΠΈ станСт огромная ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈΠ· Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΎΠ½Π°. На Β«ΠΊΠ½ΠΎΠΏΠΊΠ΅Β» пишСм Ρ‚Π΅ΠΏΠ»ΠΎΠ΅ ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠΎΠΌ ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π½Π° ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ стул.

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса Π½Π° 1 сСнтября: 30 ΠΈΠ΄Π΅ΠΉ Π½Π° Ρ„ΠΎΡ‚ΠΎ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Авг 27, 2018

Π’ΠΏΠ΅Ρ€Π΅Π΄ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ Π³ΠΎΠ΄ β€” всС ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ ΠΈ учитСля Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ готовятся ΠΊ этому ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΡƒ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ класса ΠΊ 1 сСнтября.

ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚Π΅ для ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ класса.

β€”

Или ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚Ρ‹ ΠΈΠ· ΡˆΠ°Ρ€ΠΎΠ² Π½Π° ΠΏΠ°Ρ€Ρ‚Π°Ρ….

β€”

Π’ классС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΡƒΠ³ΠΎΠ»ΠΎΠΊ Π»Π΅Ρ‚Π½ΠΈΡ… ΠΈΠ»ΠΈ осСнних Π±ΡƒΠΊΠ΅Ρ‚ΠΎΠ², сдСланных школьниками.

β€”

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ мСстом Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΅Π»ΠΊΠ° ΠΈΠ· ΡˆΠ°Ρ€ΠΎΠ².

β€”

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€Π°Π·Π΄Π½ΠΈΡ‡Π½ΠΎΠ΅ настроСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡˆΠ°Ρ€ΠΈΠΊΠΈ Π΄Π²ΡƒΡ… Π³Π°Ρ€ΠΌΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ†Π²Π΅Ρ‚ΠΎΠ².

β€”

БущСствуСт мноТСство Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² изготовлСния Ρ„ΠΈΠ³ΡƒΡ€ ΠΈΠ· ΡˆΠ°Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Π»ΠΎΠ²Π΅Ρ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ школьников Ρƒ доски.

β€”

Или Ρ†Π΅Π»Ρ‹Π΅ ΠΏΠ°Π»ΡŒΠΌΡ‹ с ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°ΠΌΠΈ.

β€”

Из ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² Π΄Π΅Π»Π°ΡŽΡ‚ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Π±ΡƒΠΊΠ²Ρ‹, ΠΈΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΡ€Π°ΡˆΠ°ΡŽΡ‚ ΡˆΡ‚ΠΎΡ€Ρ‹ ΠΈ Талюзи.

β€”

ΠŸΠΎΡ‚ΠΎΠ»ΠΎΠΊ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ красивыми ΡˆΠ°Ρ€Π°ΠΌΠΈ ΠΈ Π»Π΅Π½Ρ‚Π°ΠΌΠΈ.

β€”

Окна ΡƒΠΊΡ€Π°ΡˆΠ°ΡŽΡ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ снаруТи получился интСрСсный Π²ΠΈΠ΄.

β€”

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅: Π»Π΅Π½Ρ‚ΠΎΡ‡ΠΊΠΈ, ΡΠ²ΠΈΡΠ°ΡŽΡ‰ΠΈΠ΅ с ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ°.

β€”

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ доску β€” ΠΏΠ»Π°ΠΊΠ°Ρ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ привСтствСнными словами.

β€”

β€”

Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π±ΡƒΠΌΠ°Π³ΠΈ.

β€”

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ растяТку Β«ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· Π² 1 класс».

β€”

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° идСя β€” Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ вСсёлыС ΡˆΠ°Ρ€ΠΈΠΊΠΈ-смайлики Π²ΠΎΠ·Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚Ρ‹.

β€”

Π Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ Π½Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π³Π΅Π»ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ‚ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΊ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΡƒ.

β€”

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Π°Ρ€ΠΎΠΊ β€” ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠΊΠ΅Ρ‚Ρ‹ Π² Π²Π°Π·Π°Ρ… ΠΈΠ· Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠ΅ΠΉ.

β€”

На ΡˆΡ‚ΠΎΡ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ², сдСланноС Π² Ρ„ΠΎΡ€ΠΌΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹.

β€”

А стСны ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹ΠΌΠΈ Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ.

β€”

ΠœΠΈΠ»Ρ‹Π΅ Ρ‡Π΅Π»ΠΎΠ²Π΅Ρ‡ΠΊΠΈ ΠΈΠ· ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ€Π°Π΄ΡƒΡŽΡ‚ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ².

β€”

ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ доски: ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΈ ΠΏΠ»Π°ΠΊΠ°Ρ‚.

β€”

Π‘Ρ‚Π΅Π½Ρ‹ ΠΈ ΡˆΡ‚ΠΎΡ€Ρ‹ Π² классС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹ΠΌΠΈ гирляндами.

β€”

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ идСя β€” ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ стСны Ρ„ΠΈΠ³ΡƒΡ€ΠΊΠ°ΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ….

β€”

Π Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ с рисунками Π»ΠΈΡΡ‚ΡŒΠ΅Π² создадут осСннСС настроСниС.

β€”

ИдСя яркого осСннСго оформлСния класса.

β€”

ΠšΡ€Π΅Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ классного ΡƒΠ³ΠΎΠ»ΠΊΠ° для ΠΏΠ΅Ρ€Π²ΠΎΠΊΠ»Π°ΡˆΠ΅ΠΊ.

β€”

Микки ΠΈ Минни ΠœΠ°ΡƒΡ Π½Π° 1 сСнтября Π² классС.

β€”

МалСнькиС красивыС ΠΊΠΎΠ»ΠΎΠΊΠΎΠ»ΡŒΡ‡ΠΈΠΊΠΈ ΠΈΠ· Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Ρ… ΡˆΠ°Ρ€ΠΎΠ² β€” ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Ρ€Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π½Π° стСну.

β€”

Π‘ΠΊΡ€ΠΎΠΌΠ½ΠΎΠ΅ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π°: ΡˆΠ°Ρ€ΠΈΠΊΠΈ Ρƒ доски.

β€”

Π£Π³ΠΎΠ»ΠΎΠΊ учитСля Ρ‚ΠΎΠΆΠ΅ заслуТиваСт внимания. РодитСлям стоит Π²Π·ΡΡ‚ΡŒ Π½Π° Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ классного руководитСля.

β€”

Π£ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс Π½Π° 1 сСнтября своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ, сдСлав ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ вСсСлСС ΠΈ интСрСснСС, просто ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты (ΡˆΠ°Ρ€ΠΈΠΊΠΈ, Ρ†Π²Π΅Ρ‚Ρ‹, ΠΊΠ»Π΅ΠΉ ΠΈ Π½ΠΎΠΆΠ½ΠΈΡ†Ρ‹) ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠΈ.

ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ:

(12 голосов, срСднСС: 4.6 ΠΈΠ· 5)

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ!

python — Как ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ класс?

Π― согласСн, Ρ‡Ρ‚ΠΎ наслСдованиС Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

МнС этот вопрос ΠΎΡ‡Π΅Π½ΡŒ пригодился ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ классов, спасибо всСм.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², основанных Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ наслСдованиС влияСт Π½Π° Π²Π΅Ρ‰ΠΈ Π² Python 2.7 (ΠΈ @wraps, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚. Π”.):

  def dec (класс):
    old_foo = klass.foo
    @wraps (klass.foo)
    def Decorated_foo (self, * args, ** kwargs):
        print ('@ decorator pre% s'% msg)
        old_foo (сам, * Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        print ('@ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ post% s'% msg)
    класс.foo = Decorated_foo
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ класс

@dec # Π‘Π΅Π· скобок
класс Foo ...
  

Часто Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊ своСму Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρƒ:

  ΠΎΡ‚ functools import wraps

def dec (msg = 'ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ'):
    Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ def (класс):
        old_foo = klass.foo
        @wraps (klass.foo)
        def Decorated_foo (self, * args, ** kwargs):
            print ('@ decorator pre% s'% msg)
            old_foo (сам, * Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            print ('@ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ post% s'% msg)
        класс.foo = Decorated_foo
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ класс
    Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

@dec ('foo decorator') # Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ пустыС
класс Foo (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
    def foo (self, * args, ** kwargs):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ('foo.foo ()')

@dec ('Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ субфу')
класс SubFoo (Foo):
    def foo (self, * args, ** kwargs):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ('subfoo.foo () pre')
        super (SubFoo, self) .foo (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        print ('subfoo.foo () сообщСниС')

@dec ('Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ субфу')
класс SubSubFoo (SubFoo):
    def foo (self, * args, ** kwargs):
        print ('subsubfoo.foo () pre ')
        super (SubSubFoo, self) .foo (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        print ('subsubfoo.foo () сообщСниС')

SubSubFoo (). Foo ()
  

Π’Ρ‹Ρ…ΠΎΠ΄Ρ‹:

  @decorator pre subsubfoo decorator
subsubfoo.foo () ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
@decorator ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ subfoo
subfoo.foo () pre
@decorator pre foo Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€
foo.foo ()
@decorator пост foo Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€
subfoo.foo () сообщСниС
@decorator пост-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ subfoo
Subsubfoo.foo () сообщСниС
@decorator post subsubfoo Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€
  

Π― использовал Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌΠΈ.Π’ΠΎΡ‚ класс для ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ класса:

  класс Dec (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):

    def __init __ (self, msg):
        self.msg = msg

    def __call __ (сСбя, класс):
        old_foo = klass.foo
        msg = self.msg
        def Decorated_foo (self, * args, ** kwargs):
            print ('@ decorator pre% s'% msg)
            old_foo (сам, * Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            print ('@ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ post% s'% msg)
        klass.foo = Decorated_foo
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ класс
  

Π‘ΠΎΠ»Π΅Π΅ надСТная вСрсия, которая провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ этих скобок ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ классС:

  ΠΈΠ· ΠΈΠ½ΡΠΏΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ isclass

def decorate_if (условиС, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, Ссли условиС ΠΈΠ½Π°Ρ‡Π΅ лямбда x: x

def dec (сообщСниС):
    # Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ вашСго Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ являСтся классом
    ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ Π½Π΅ isclass (сообщСниС)

    Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ def (класс):
        old_foo = getattr (klass, 'foo', НСт)

        @decorate_if (old_foo, ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ (класс.Ρ„Ρƒ))
        def Decorated_foo (self, * args, ** kwargs):
            print ('@ decorator pre% s'% msg)
            Ссли Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ (old_foo):
                old_foo (сам, * Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            print ('@ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ post% s'% msg)

        klass.foo = Decorated_foo
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ класс

    Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°
  

assert провСряСт, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π½Π΅ использовался Π±Π΅Π· скобок. Если Π΄Π°, Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс пСрСдаСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ msg Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ AssertionError .

@decorate_if примСняСт Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ , Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли условиС оцСниваСтся ΠΊΠ°ΠΊ True .

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ getattr , Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ тСст ΠΈ @decorate_if , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π½Π΅ сломался, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ foo () Π½Π΅ сущСствуСт Π² Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ классС.

python — ΠΊΠ°ΠΊ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра классом Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°?

tl; dr

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, сдСлав класс Timed дСскриптором ΠΈ Π²Π΅Ρ€Π½ΡƒΠ² частично ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· __get__ , которая примСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Test Π² качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

  класс Timed (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
    def __init __ (self, f):
        сСбя.func = f

    def __call __ (self, * args, ** kwargs):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (сам)
        start = dt.datetime.now ()
        ret = self.func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        time = dt.datetime.now () - Π½Π°Ρ‡Π°Π»ΠΎ
        ret ["врСмя"] = врСмя
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ

    def __get __ (я, экзСмпляр, Π²Π»Π°Π΄Π΅Π»Π΅Ρ†):
        from functools import partial
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ частичного (self .__ call__, экзСмпляр)
  

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python для Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° ,

Бинтаксис Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° — это просто синтаксичСский сахар, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сСмантичСски эквивалСнтны:

  def f (...):
    ...
f = статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ (f)

@staticmethod
def f (...):
    ...
  

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅,

  @Timed
def Decorated (self, * args, ** kwargs):
  

это Π½Π° самом Π΄Π΅Π»Π΅

  ΡƒΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ = ΠŸΡ€ΠΈΡƒΡ€ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΉ (ΡƒΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ)
  

Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСдаСтся Timed , ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ фактичСски привязан, Π½Π΅ пСрСдаСтся вмСстС с Π½ΠΈΠΌ . Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ

  ret = self.func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
  

self.func Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° нСсвязанный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ вызываСтся с Hello Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ self ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Hello .


Как это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ?

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ вас Π½Π΅Ρ‚ ссылки Π½Π° экзСмпляр Test Π² Timed , СдинствСнный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это — ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Timed Π² класс дСскриптора .Π¦ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ€Π°Π·Π΄Π΅Π» Β«Π’Ρ‹Π·ΠΎΠ² дСскрипторов»,

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, дСскриптор — это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Β«ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ привязки», доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ дСскриптора: __get __ () , __set __ () ΠΈ __delete __ () . Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ называСтся дСскриптором.

ПовСдСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ, установкС ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ· словаря ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.НапримСр, ax ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ поиска, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с a .__ dict __ ['x'] , Π·Π°Ρ‚Π΅ΠΌ Ρ‚ΠΈΠΏΠ° (a) .__ dict __ ['x'] ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΡƒΡŽΡΡ Ρ‡Π΅Ρ€Π΅Π· Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы Ρ‚ΠΈΠΏΠ° (a) Π±Π΅Π· мСтаклассов.

Однако , Ссли искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² дСскриптора, Ρ‚ΠΎΠ³Π΄Π° Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ дСскриптора вмСсто .

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Timed дСскриптором, просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄

  def __get __ (я, экзСмпляр, Π²Π»Π°Π΄Π΅Π»Π΅Ρ†):
    ...
  

Π—Π΄Π΅ΡΡŒ self относится ΠΊ самому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Timed , instance относится ΠΊ фактичСскому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся поиск Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π° owner относится ΠΊ классу, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ экзСмпляру .

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° вызываСтся __call__ Π½Π° Timed , Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ __get__ . Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊ экзСмпляр класса Test (Π΄Π°ΠΆΠ΅ Π΄ΠΎ Hello ).Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ создаСм Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ частично ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ экзСмпляр Test , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

  def __get __ (я, экзСмпляр, Π²Π»Π°Π΄Π΅Π»Π΅Ρ†):
    from functools import partial
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ частичного (self .__ call__, экзСмпляр)
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ self .__ call__ — это связанный ΠΌΠ΅Ρ‚ΠΎΠ΄ (привязанный ΠΊ экзСмпляру Timed ), Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ partial являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° self .__ call__ .

Π˜Ρ‚Π°ΠΊ, всС это эффСктивно пСрСводится ΠΊΠ°ΠΊ это

  Ρ‚.call_deco ()
self.decorated ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚", world = "World")
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ self.decorated Π½Π° самом Π΄Π΅Π»Π΅ Timed (Decorated) (с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ TimedObject ). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ обращаСмся ΠΊ Π½Π΅ΠΌΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ __get__ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ

  def call_deco (сам):
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (самодСкорированная)
    self.decorated ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚", world = "World")
  

Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚

  
...
  

Π˜Ρ‚Π°ΠΊ,

  self.decorated ("Hello", world = "World")
  

пСрСводится Π²

  Timed .__ get __ (TimedObject, , Test .__ class __) ("Hello", world = "World")
  

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Ρ‡Π°ΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ,

  partial (TimedObject .__ call__, ) ("Hello", world = "World"))
  

, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅

  TimedObject.__call __ (, 'Hello', world = "World")
  

Π˜Ρ‚Π°ΠΊ, Ρ‚Π°ΠΊΠΆΠ΅ становится Ρ‡Π°ΡΡ‚ΡŒΡŽ * args , ΠΈ ΠΊΠΎΠ³Π΄Π° вызываСтся self.func , ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ .

Primer on Python Decorators — Real Python

Π’ этом руководствС ΠΏΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ ΠΌΡ‹ рассмотрим, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ собой ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ простой синтаксис для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка.

По ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ — это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½Π΅ измСняя Π΅Π΅ явно.

Π—Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ, особСнно послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ здСсь.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° основС Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² . Π’ΠΎΡ‚ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>>
  >>> def add_one (число):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ число + 1

>>> add_one (2)
3
  

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты, Π° Π½Π΅ просто ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅.Ѐункция print () являСтся основным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого: ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None , имСя ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π½Π° консоль. Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, достаточно Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ функциях ΠΊΠ°ΠΊ ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с чистыми функциями Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов. Π₯отя Python Π½Π΅ являСтся чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ языком, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ пСрвоклассныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠŸΠ΅Ρ€Π²ΠΎΠΊΠ»Π°ΡΡΠ½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹

Π’ Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это пСрвоклассныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² , ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (string, int, float, list ΠΈ Ρ‚. Π”.). Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  def say_hello (имя):
    return f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}"

def be_awesome (имя):
    return f "Π­ΠΉ, {name}, вмСстС ΠΌΡ‹ самыС ΠΊΡ€ΡƒΡ‚Ρ‹Π΅!"

def greet_bob (greeter_func):
    return greeter_func ("Π‘ΠΎΠ±")
  

Π—Π΄Π΅ΡΡŒ say_hello () ΠΈ be_awesome () — это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ имя Π² Π²ΠΈΠ΄Π΅ строки.Однако функция greet_bob () ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ say_hello () ΠΈΠ»ΠΈ be_awesome () :

>>>
  >>> greet_bob (say_hello)
"ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘ΠΎΠ±"

>>> greet_bob (be_awesome)
Β«Π™ΠΎ Π‘ΠΎΠ±, вмСстС ΠΌΡ‹ самыС ΠΊΡ€ΡƒΡ‚Ρ‹Π΅!Β»
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ greet_bob (say_hello) относится ΠΊ Π΄Π²ΡƒΠΌ функциям, Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: greet_bob () ΠΈ say_hello .Ѐункция say_hello Π½Π°Π·Π²Π°Π½Π° Π±Π΅Π· скобок. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылка Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Ѐункция Π½Π΅ выполняСтся. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, функция greet_bob () написана Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, поэтому ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ . Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ функциями. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с двумя Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ функциями:

  def parent ():
    print ("ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ parent ()")

    def first_child ():
        print ("ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first_child ()")

    def second_child ():
        print ("ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ second_child ()")

    second_child ()
    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π±Π΅Π½ΠΎΠΊ()
  

Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ parent () ? ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом ΠΌΠΈΠ½ΡƒΡ‚ΠΊΡƒ.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

>>>
  >>> Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ()
ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ parent ()
ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ second_child ()
ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first_child ()
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния. Как ΠΈ Π² случаС с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями, ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Они ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости parent () : ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ parent () ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ first_child () . Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

  Traceback (послСдний звонок послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
NameError: имя first_child Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ
  

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ parent () , Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first_child () ΠΈ second_child () .Но ΠΈΠ·-Π·Π° своСй локальной области дСйствия ΠΎΠ½ΠΈ нСдоступны Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ parent () .

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Python Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ возвращаСтся ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ parent () :

  def parent (число):
    def first_child ():
        return "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π­ΠΌΠΌΠ°"

    def second_child ():
        return "Π—ΠΎΠ²ΠΈ мСня Π›ΠΈΠ°ΠΌ"

    Ссли num == 1:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ first_child
    Π΅Ρ‰Π΅:
        return second_child
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ first_child Π±Π΅Π· скобок.Напомним, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ ссылку Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ first_child . Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ first_child () Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках относится ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

>>>
  >>> ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ = Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ (1)
>>> Π²Ρ‚ΠΎΡ€ΠΎΠΉ = Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ (2)

>>> ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ
<функция parent.  .first_child Π² 0x7f599f1e2e18>

>>> Π²Ρ‚ΠΎΡ€ΠΎΠΉ
<Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ функция. .second_child Π½Π° 0x7f599dad5268>
  

НСсколько Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрвая пСрСмСнная относится ΠΊ локальной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ first_child () Π²Π½ΡƒΡ‚Ρ€ΠΈ parent () , Π° second ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° second_child () .

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ , ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями, Π΄Π°ΠΆΠ΅ Ссли ΠΊ функциям, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ:

>>>
  >>> ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ()
'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π­ΠΌΠΌΠ°'

>>> Π²Ρ‚ΠΎΡ€ΠΎΠΉ ()
"Π—ΠΎΠ²ΠΈ мСня Π›ΠΈΠ°ΠΌ"
  

НаконСц, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ выполняли Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ first_child () .Однако Π² этом послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π½Π΅ добавляли ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ функциям — first_child — ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ссылка Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Π•ΡΡ‚ΡŒ смысл?

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π² Python, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ волшСбного звСря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ являСтся Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Python. НачнСм с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

  def my_decorator (функция):
    def wrapper ():
        print ("Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.")
        func ()
        print ("Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.")
    возвратная ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°

def say_whee ():
    print ("Π£Ρ„!")

say_whee = my_decorator (say_whee)
  

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ say_whee () ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅:

>>>
  >>> say_whee ()
Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
Ой!
Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь происходит, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ.ΠœΡ‹ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ просто примСняСм всС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ ΡƒΠ·Π½Π°Π»ΠΈ.

Π’Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ происходит Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС:

  say_whee = my_decorator (say_whee)
  

ЀактичСски, имя say_whee Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ wrapper () . ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ my_decorator (say_whee) :

>>>
  >>> say_whee
<функция my_decorator. .wrapper ΠΏΠΎ адрСсу 0x7f3c5dfd42f0>
  

Однако wrapper () ΠΈΠΌΠ΅Π΅Ρ‚ ссылку Π½Π° исходный say_whee () ΠΊΠ°ΠΊ func ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ print () .

ΠŸΡ€ΠΎΡ‰Π΅ говоря: Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, измСняя Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ wrapper () — это обычная функция Python, способ измСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ динамичСски.Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒ сосСдСй, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ дня:

  ΠΈΠ· datetime import datetime

def not_during_the_night (функция):
    def wrapper ():
        Ссли 7 <= datetime.now (). hour <22:
            func ()
        Π΅Ρ‰Π΅:
            pass # ВишС, сосСди спят
    возвратная ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°

def say_whee ():
    print ("Π£Ρ„!")

say_whee = not_during_the_night (say_whee)
  

Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ say_whee () послС ΠΎΡ‚Ρ…ΠΎΠ΄Π° ΠΊΠΎ сну, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚:

БинтаксичСский сахар!

Π’ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ украсили say_whee () Π²Ρ‹ΡˆΠ΅, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅.ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π²Ρ‹ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ имя say_whee Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ скрываСтся ΠΏΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ВмСсто этого Python позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π±ΠΎΠ»Π΅Π΅ простым способом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символа @ , ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ синтаксисом Β«ΠΏΠΈΡ€ΠΎΠ³Π°Β». Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°:

  def my_decorator (функция):
    def wrapper ():
        print ("Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.")
        func ()
        print ("Π§Ρ‚ΠΎ-Ρ‚ΠΎ происходит послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.")
    возвратная ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°

@my_decorator
def say_whee ():
    print ("Π£Ρ„!")
  

Π˜Ρ‚Π°ΠΊ, @my_decorator - это просто Π±ΠΎΠ»Π΅Π΅ простой способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ say_whee = my_decorator (say_whee) . Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ примСняСтС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

Напомним, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ - это обычная функция Python. Доступны всС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ инструмСнты для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. Π”Π°Π²Π°ΠΉΡ‚Π΅ пСрСмСстим Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… функциях.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ decorators.py со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

  def do_twice (func):
    def wrapper_do_twice ():
        func ()
        func ()
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_do_twice
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π²Π°Ρ‚ΡŒ свою Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ имя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ wrapper () , ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мноТСство Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, Π½ΠΎ с прСфиксом wrapper_ .

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π½ΠΎΠ²Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² рСгулярный ΠΈΠΌΠΏΠΎΡ€Ρ‚:

  ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import do_twice

@do_twice
def say_whee ():
    print ("Π£Ρ„!")
  

Когда Π²Ρ‹ запуститС этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ исходный say_whee () выполняСтся Π΄Π²Π°ΠΆΠ΄Ρ‹:

>>>
  >>> say_whee ()
Ой!
Ой!
  

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.Π’Ρ‹ Π΅Ρ‰Π΅ моТСшь Π΅Π³ΠΎ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ? Π”Π°Π²Π°ΠΉ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

  ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import do_twice

@do_twice
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  

К соТалСнию, запуск этого ΠΊΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

>>>
  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("ΠœΠΈΡ€")
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
TypeError: wrapper_do_twice () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 0 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ Π΄Π°Π½ 1
  

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ внутрСнняя функция wrapper_do_twice () Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ Π΅ΠΉ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ name = "World" .Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² wrapper_do_twice () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для созданной Π²Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ say_whee () .

РСшСниС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ * args ΠΈ ** kwargs Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ decorators.py ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  def do_twice (func):
    def wrapper_do_twice (* args, ** kwargs):
        func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_do_twice
  

ВнутрСнняя функция wrapper_do_twice () Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½Π° ΡƒΠΊΡ€Π°ΡˆΠ°Π΅Ρ‚.Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π° Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° say_whee () ΠΈ greet () Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚:

>>>
  >>> say_whee ()
Ой!
Ой!

>>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("ΠœΠΈΡ€")
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
  

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· ΡƒΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π§Ρ‚ΠΎ происходит с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ? Π§Ρ‚ΠΎ ΠΆ, Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρƒ. Допустим, Π²Ρ‹ ΡƒΠΊΡ€Π°ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import do_twice

@do_twice
def return_greeting (имя):
    print ("Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привСтствия")
    return f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}"
  

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

>>>
  >>> hi_adam = return_greeting ("Адам")
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привСтствия
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привСтствия
>>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΏΡ€ΠΈΠ²Π΅Ρ‚_Π°Π΄Π°ΠΌ)
Никто
  

Ой, ваш Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ съСл Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ do_twice_wrapper () Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ явно, Π²Ρ‹Π·ΠΎΠ² return_greeting ("Adam") закончился Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΠ» None .

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ функция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ . Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» decorators.py :

  def do_twice (func):
    def wrapper_do_twice (* args, ** kwargs):
        func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        return func (* args, ** kwargs)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_do_twice
  

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>>
  >>> return_greeting ("Адам")
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привСтствия
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привСтствия
"ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Адам"
  

ΠšΡ‚ΠΎ Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅?

Π‘ΠΎΠ»ΡŒΡˆΠΈΠΌ удобством ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Python, особСнно Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, являСтся Π΅Π³ΠΎ мощная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊ самоанализу.Π‘Π°ΠΌΠΎΠ°Π½Π°Π»ΠΈΠ· - это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π½Π°Ρ‚ΡŒ ΠΎ своих собствСнных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… Π²ΠΎ врСмя выполнСния. НапримСр, функция Π·Π½Π°Π΅Ρ‚ своС имя ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ:

>>>
  >>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ
<встроСнная функция ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ>

>>> print .__ name__
'Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ'

>>> help (Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ)
Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print Π²ΠΎ встроСнных модулях:

Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ(...)
    <ΠΏΠΎΠ»Π½ΠΎΠ΅ справочноС сообщСниС>
  

Π‘Π°ΠΌΠΎΠ°Π½Π°Π»ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ с функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ опрСдСляСтС сами:

>>>
  >>> say_whee
<функция do_twice. .wrapper_do_twice ΠΏΠΎ адрСсу 0x7f43700e52f0>

>>> say_whee .__ name__
'wrapper_do_twice'

>>> ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ (say_whee)
Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ wrapper_do_twice Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ:

wrapper_do_twice ()
  

Однако послС оформлСния say_whee () ΠΎΡ‡Π΅Π½ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π»Π°ΡΡŒ Π² своСй идСнтичности. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ сообщаСт, Ρ‡Ρ‚ΠΎ это внутрСнняя функция wrapper_do_twice () Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° do_twice () . Π₯отя тСхничСски это ΠΏΡ€Π°Π²Π΄Π°, это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ полСзная информация.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @ functools.wraps , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохранит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± исходной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ decorators.py Π΅Ρ‰Π΅ Ρ€Π°Π·:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def do_twice (функция):
    @ functools.wraps (функция)
    def wrapper_do_twice (* args, ** kwargs):
        func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        return func (* args, ** kwargs)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_do_twice
  

Π’ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ say_whee () Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ:

>>>
  >>> say_whee
<функция say_whee Π² 0x7ff79a60f2f0>

>>> say_whee.__имя__
'say_whee'

>>> ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ (say_whee)
Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ say_whee Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ whee:

say_whee ()
  

Намного Π»ΡƒΡ‡ΡˆΠ΅! Π’Π΅ΠΏΠ΅Ρ€ΡŒ say_whee () остаСтся самим собой послС оформлСния.

ВСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ: Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @ functools.wraps ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ functools.update_wrapper () для обновлСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ __name__ ΠΈ __doc__ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² интроспСкции.

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Ρ‰Π΅ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ².Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π² основном Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΉ ΠΆΠ΅ схСмС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΡƒΠΆΠ΅ усвоили:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ def (func):
    @ functools.wraps (функция)
    def wrapper_decorator (* args, ** kwargs):
        # Π‘Π΄Π΅Π»Π°ΠΉ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠ΅Ρ€Π΅Π΄
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        # Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ послС
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_decorator
  

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° - Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ шаблон для создания Π±ΠΎΠ»Π΅Π΅ слоТных Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ сохранСны Π² Π²Π°ΡˆΠΈΡ… Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… .py . Напомним, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² этом руководствС.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ синхронизации

НачнСм с создания Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @timer . Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° консоль. Π’ΠΎΡ‚ ΠΊΠΎΠ΄:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def Ρ‚Π°ΠΉΠΌΠ΅Ρ€ (функция):
    "" "ВывСсти врСмя выполнСния Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ" ""
    @ functools.wraps (функция)
    def wrapper_timer (* args, ** kwargs):
        start_time = врСмя.perf_counter () # 1
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        end_time = time.perf_counter () # 2
        run_time = end_time - start_time # 3
        print (f "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ {func .__ name __! r} Π·Π° {run_time: .4f} secs")
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_timer

@timer
def Waste_some_time (num_times):
    для _ в диапазонС (num_times):
        сумма ([i ** 2 для i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (10000)])
  

Π­Ρ‚ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, сохраняя врСмя нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² строкС, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ # 1 ) ΠΈ сразу послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² # 2 ).ВрСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ функция, являСтся Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ( # 3 ). ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ time.perf_counter () , которая Ρ…ΠΎΡ€ΠΎΡˆΠΎ измСряСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ΠΎΠ²:

>>>
  >>> Waste_some_time (1)
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ "Waste_some_time" Π·Π° 0,0010 сСкунды

>>> Waste_some_time (999)
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ "Waste_some_time" Π·Π° 0,3260 сСкунды
  

Запускай сам. ΠŸΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ построчно. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ Π½Π΅ поняли. Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ - ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ сущСства. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π° Π½Π΅ΠΌ ΠΏΠΎΡΠΏΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ сдСлайтС рисунок ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @timer ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли Π²Ρ‹ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π²Π°ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ измСрСния ΠΊΠΎΠ΄Π°, Π²Π°ΠΌ слСдуСт вмСсто этого Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ timeit Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Он Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сборку мусора ΠΈ запускаСт нСсколько ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡˆΡƒΠΌ ΠΈΠ· быстрых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Код ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @debug Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ вызываСтся функция, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° функция вызываСтся:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def ΠΎΡ‚Π»Π°Π΄ΠΊΠ° (функция):
    "" "Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ подпись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" ""
    @ functools.wraps (функция)
    def wrapper_debug (* args, ** kwargs):
        args_repr = [repr (a) для a Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…] # 1
        kwargs_repr = [f "{k} = {v! r}" для k, v в kwargs.items ()] # 2
        подпись = "," .join (args_repr + kwargs_repr) # 3
        print (f "Π’Ρ‹Π·ΠΎΠ² {func .__ name __} ({подпись})")
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        print (f "{func .__ name __! r} Π²Π΅Ρ€Π½ΡƒΠ»Π° {value! r}") # 4
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_debug
  

Подпись создаСтся ΠΏΡƒΡ‚Π΅ΠΌ объСдинСния строковых прСдставлСний всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π¦ΠΈΡ„Ρ€Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ спискС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ коммСнтариям Π² ΠΊΠΎΠ΄Π΅:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ список ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ repr () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€Π°ΡΠΈΠ²ΡƒΡŽ строку, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова. Π‘Ρ‚Ρ€ΠΎΠΊΠ° f Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , Π³Π΄Π΅ спСцификатор ! R ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ repr () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдставлСния значСния.
  3. Бписки ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ строку подписи с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ запятой.
  4. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСчатаСтся послС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² Π΅Π³ΠΎ ΠΊ простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ ΠΈ ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова:

  @debug
def make_greeting (имя, возраст = НСт):
    Ссли возраст отсутствуСт:
        return f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}!"
    Π΅Ρ‰Π΅:
        return f "Ого, {имя}! {возраст}, Ρ‚Ρ‹ ΡƒΠΆΠ΅ вырос!"
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @debug ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ подпись ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ make_greeting () :

>>>
  >>> make_greeting ("Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½")
Π’Ρ‹Π·ΠΎΠ² make_greeting ('Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½')
Β«make_greetingΒ» Π²Π΅Ρ€Π½ΡƒΠ» Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½!Β»
Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½!Β»

>>> make_greeting ("Π ΠΈΡ‡Π°Ρ€Π΄", возраст = 112)
Π’Ρ‹Π·ΠΎΠ² make_greeting ('Π ΠΈΡ‡Π°Ρ€Π΄', возраст = 112)
make_greeting Π²Π΅Ρ€Π½ΡƒΠ»: Β«Π­ΠΉ, Π ΠΈΡ‡Π°Ρ€Π΄! Π£ΠΆΠ΅ 112, Π²Ρ‹ растСтС! Β»
Β«Π­ΠΉ, Π ΠΈΡ‡Π°Ρ€Π΄! Π£ΠΆΠ΅ 112, Π²Ρ‹ растСтС! Β»

>>> make_greeting (name = "Dorrisile", возраст = 116)
Π’Ρ‹Π·ΠΎΠ² make_greeting (name = 'Dorrisile', возраст = 116)
make_greeting Π²Π΅Ρ€Π½ΡƒΠ»: Β«Π­ΠΉ, Π”ΠΎΡ€Ρ€ΠΈΡΠΈΠ»ΡŒ! 116 ΡƒΠΆΠ΅, Π²Ρ‹ растСтС! '
Β«Π­ΠΉ, Π”ΠΎΡ€Ρ€ΠΈΡΠΈΠ»ΡŒ! 116 ΡƒΠΆΠ΅, Π²Ρ‹ растСтС! '
  

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ сразу ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @debug просто повторяСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написали.Он Π±ΠΎΠ»Π΅Π΅ эффСктивСн Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ нСбольшим ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ функциям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сами Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вычисляСтся ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊ матСматичСской константС e :

  ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ
ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ

# ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΊ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
math.factorial = ΠΎΡ‚Π»Π°Π΄ΠΊΠ° (math.factorial)

def ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ_e (условия = 18):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сумму (1 / math.factorial (n) для n Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (условия))
  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΊ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Аппроксимация e основана Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ сСрии:

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ approbug_e () Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @debug :

>>>
  >>> ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ_Π΅ (5)
Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (0)
'Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»' Π²Π΅Ρ€Π½ΡƒΠ» 1
Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (1)
'factorial' Π²Π΅Ρ€Π½ΡƒΠ» 1
Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (2)
'Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»' Π²Π΅Ρ€Π½ΡƒΠ» 2
Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (3)
'factorial' Π²Π΅Ρ€Π½ΡƒΠ» 6
Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (4)
'factorial' Π²Π΅Ρ€Π½ΡƒΠ» 24
2,708333333333333
  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊ истинному Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ e = 2.718281828, Π΄ΠΎΠ±Π°Π²ΠΈΠ² всСго 5 Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ².

Код замСдлСния

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Π—Π°Ρ‡Π΅ΠΌ Π²Π°ΠΌ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ свой ΠΊΠΎΠ΄ Python? ВСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая постоянно провСряСт, измСнился Π»ΠΈ рСсурс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π΅Π±-страница. Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @slow_down Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΏΠ°Ρ‚ΡŒ Π·Π° ΠΎΠ΄Π½Ρƒ сСкунду Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def slow_down (func):
    "" "Π‘ΠΏΠΈΡ‚Π΅ 1 сСкунду ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ" ""
    @functools.обСртывания (func)
    def wrapper_slow_down (* args, ** kwargs):
        врСмя сна (1)
        return func (* args, ** kwargs)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_slow_down

@Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ
ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт def (from_number):
    Ссли from_number <1:
        print ("Π’Π·Π»Π΅Ρ‚!")
    Π΅Ρ‰Π΅:
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (from_number)
        ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (from_number - 1)
  

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @slow_down , Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

>>>
  >>> ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (3)
3
2
1
Π’Π·Π»Π΅Ρ‚!
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ѐункция countdown () являСтся рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это функция, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сама сСбя. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ рСкурсивных функциях Π² Python, см. НашС руководство ΠΏΠΎ рСкурсивному ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡŽ Π² Python.

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @slow_down всСгда спит Π½Π° ΠΎΠ΄Π½Ρƒ сСкунду. ПозТС Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, пСрСдавая Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρƒ.

РСгистрация ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ°ΡŽΡ‚. Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ просто Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция сущСствуСт, ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ Π² Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для создания ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля:

  случайный ΠΈΠΌΠΏΠΎΡ€Ρ‚
ΠŸΠ›ΠΠ“Π˜ΠΠ« = dict ()

рСгистр def (функция):
    "" "ЗарСгистрируйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ ΠΏΠ»Π°Π³ΠΈΠ½" ""
    ΠŸΠ›ΠΠ“Π˜ΠΠ« [func .__ name__] = func
    функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

@рСгистр
def say_hello (имя):
    return f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}"

@рСгистр
def be_awesome (имя):
    return f "Π­ΠΉ, {name}, вмСстС ΠΌΡ‹ самыС ΠΊΡ€ΡƒΡ‚Ρ‹Π΅!"

def randomly_greet (имя):
    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ, greeter_func = random.choice (список (PLUGINS.items ()))
    print (f "ИспользованиС {greeter! r}")
    return greeter_func (имя)
  

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @register просто сохраняСт ссылку Π½Π° Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² глобальном dict PLUGINS .ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @ functools.wraps Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Ѐункция randomly_greet () случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· зарСгистрированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для использования. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ PLUGINS ΡƒΠΆΠ΅ содСрТит ссылки Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, зарСгистрированный ΠΊΠ°ΠΊ ΠΏΠ»Π°Π³ΠΈΠ½:

>>>
  >>> ΠŸΠ›ΠΠ“Π˜ΠΠ«
{'say_hello': <функция say_hello at 0x7f768eae6730>,
 'be_awesome': <функция be_awesome at 0x7f768eae67b8>}

>>> randomly_greet («Алиса»)
ИспользованиС say_hello
"ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Алиса"
  

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ прСимущСством этой простой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ список ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π­Ρ‚ΠΎΡ‚ список создаСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сами. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°: просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΡƒΠΊΡ€Π°ΡΡŒΡ‚Π΅ Π΅Π΅ @register .

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с globals () Π² Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сходство с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΠ»Π°Π³ΠΈΠ½Π°. globals () Π΄Π°Π΅Ρ‚ доступ ΠΊΠΎ всСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ваши ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹:

>>>
  >>> Π³Π»ΠΎΠ±Π°Π»Ρ‹ ()
{..., # ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… здСсь.'say_hello': <функция say_hello Π² 0x7f768eae6730>,
 'be_awesome': <функция be_awesome at 0x7f768eae67b8>,
 'randomly_greet': <функция randomly_greet Π² 0x7f768eae6840>}
  

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @register , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ список интСрСсных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, эффСктивно выбирая Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· globals () .

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ вошСл Π² систСму?

ПослСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΠΎΠ»Π΅Π΅ красивым Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ.Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Flask для настройки Π²Π΅Π±-страницы / secret , которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вошли Π² систСму ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹:

  ΠΈΠ· flask import Flask, g, request, redirect, url_for
import functools
app = Flask (__ имя__)

def login_required (func):
    "" "Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ вошСл Π² систСму, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ" ""
    @ functools.wraps (функция)
    def wrapper_login_required (* args, ** kwargs):
        Ссли g.user - None:
            return redirect (url_for ("Π»ΠΎΠ³ΠΈΠ½", next = request.url))
        return func (* args, ** kwargs)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_login_required

@ app.route ("/ сСкрСт")
@login_required
def secret ():
    ...
  

Π₯отя это Π΄Π°Π΅Ρ‚ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π² ваш Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π°ΠΌ Π½Π΅ слСдуСт ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Для Flask вмСсто этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Flask-Login, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

НСобычныС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹

Π”ΠΎ сих ΠΏΠΎΡ€ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ простыС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹.Π£ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ довольно Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π² Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части этого руководства ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

ΠšΠ»Π°ΡΡΡ‹ дСкорирования

Π•ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… способа использования Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² классах. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π»ΠΈ с функциями: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса .Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² своС врСмя Π±Ρ‹Π»ΠΈ прСдставлСны Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹.

НСкоторыС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, Π΄Π°ΠΆΠ΅ встроСнныС Π² Python, - это @classmethod , @staticmethod ΠΈ @property . Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ @classmethod ΠΈ @staticmethod ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ пространства ΠΈΠΌΠ΅Π½ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ связаны с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром этого класса. Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @property ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для настройки Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ сСттСров для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² класса.Π Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅ Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования этих Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса Circle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ @classmethod , @staticmethod ΠΈ @property :

  класс ΠšΡ€ΡƒΠ³:
    def __init __ (self, radius):
        self._radius = радиус

    @имущСство
    радиус Π΄Π΅Ρ„ (self):
        "" "ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ радиуса" ""
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self._radius

    @ radius.setter
    радиус Π΄Π΅Ρ„ (self, value):
        "" "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ радиус, ΠΏΡ€ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ" ""
        Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅> = 0:
            сСбя._radius = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        Π΅Ρ‰Π΅:
            ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ValueError ("Радиус Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ")

    @имущСство
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ опрСдСлСния (self):
        "" "Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΡ€ΡƒΠ³Π°" ""
        return self.pi () * self.radius ** 2

    def cyl_volume (self, height):
        "" "Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ объСм Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π° с ΠΊΡ€ΡƒΠ³ΠΎΠΌ Π² качСствС основания" ""
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.area * height

    @classmethod
    def unit_circle (cls):
        "" "Заводской ΠΌΠ΅Ρ‚ΠΎΠ΄ создания окруТности радиусом 1" ""
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ cls (1)

    @staticmethod
    def pi ():
        "" "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ο€, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ.ΠΏΠΈ вмСсто "" "
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 3,1415

5

Π’ этом классС:

  • .cylinder_volume () - это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.
  • .radius - свойство измСняСмоС: для Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Однако, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ установки, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ провСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ тСстированиС ошибок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ установлСн Π½Π° бСссмыслСнноС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. Доступ ΠΊ свойствам осущСствляСтся ΠΊΠ°ΠΊ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ Π±Π΅Π· скобок.
  • .area являСтся Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΡ‹ΠΌ имущСством: Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· .setter () нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±Π΅Π· скобок.
  • .unit_circle () - это ΠΌΠ΅Ρ‚ΠΎΠ΄ класса. Он Π½Π΅ привязан ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ экзСмпляру Circle . ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ экзСмпляры класса.
  • .pi () - статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄. На самом Π΄Π΅Π»Π΅ ΠΎΠ½ Π½Π΅ зависит ΠΎΡ‚ класса Circle , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ пространства ΠΈΠΌΠ΅Π½.БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для экзСмпляра, Ρ‚Π°ΠΊ ΠΈ для класса.

Класс Circle ΠΌΠΎΠΆΠ΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>>
  >>> c = ΠšΡ€ΡƒΠ³ (5)
>>> c.radius
5

>>> c.area
78,5398163375

>>> c.radius = 2
>>> c.area
12,566370614

>>> c.area = 100
AttributeError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚

>>> c.cylinder_volume (высота = 4)
50.265482456

>>> c.radius = -1
ValueError: радиус Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

>>> c = ΠšΡ€ΡƒΠ³.unit_circle ()
>>> c.radius
1

>>> c.pi ()
3,1415

5 >>> Circle.pi () 3,1415

5

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ @debug ΠΈ @timer , описанныС Ρ€Π°Π½Π΅Π΅:

  ΠΈΠ· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€

класс TimeWaster:
    @ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ
    def __init __ (self, max_num):
        self.max_num = max_num

    @timer
    def Waste_time (self, num_times):
        для _ в диапазонС (num_times):
            sum ([i ** 2 for i in range (self.max_num)])
  

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот класс, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

>>>
  >>> tw = TimeWaster (1000)
Π’Ρ‹Π·ΠΎΠ² __init __ (<ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ time_waster.TimeWaster ΠΏΠΎ адрСсу 0x7efccce03908>, 1000)
'__init__' Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ» None

>>> tw.waste_time (999)
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ "Waste_time" Π·Π° 0,3376 сСк.
  

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ использования Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для классов - это ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ вСсь класс . Π­Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сдСлано Π² Π½ΠΎΠ²ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ dataclasses Π² Python 3.7:

  ΠΈΠ· классов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс Π΄Π°Π½Π½Ρ‹Ρ…

@dataclass
класс PlayingCard:
    Ρ€Π°Π½Π³: str
    ΠΊΠΎΡΡ‚ΡŽΠΌ: ΡƒΠ».
  

Бмысл синтаксиса Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅, написав PlayingCard = dataclass (PlayingCard) .

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ простая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ использования мСтаклассов. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π²Ρ‹ измСняСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса динамичСски.

НаписаниС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° класса ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° написаниС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° класс, Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ЀактичСски, всС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ классов. Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΡ… Π² классС вмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡ… эффСкт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @timer примСняСтся ΠΊ классу:

  ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

@timer
класс TimeWaster:
    def __init __ (self, max_num):
        сСбя.max_num = max_num

    def Waste_time (self, num_times):
        для _ в диапазонС (num_times):
            sum ([i ** 2 для i в диапазонС (self.max_num)])
  

Π£ΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠ΅ класса Π½Π΅ ΡƒΠΊΡ€Π°ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Напомним, Ρ‡Ρ‚ΠΎ @timer - это просто сокращСниС ΠΎΡ‚ TimeWaster = timer (TimeWaster) .

Π—Π΄Π΅ΡΡŒ @timer измСряСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для создания экзСмпляра класса:

>>>
  >>> tw = TimeWaster (1000)
Π—Π°Π²Π΅Ρ€ΡˆΠΈΠ» TimeWaster Π·Π° 0.0000 сСкунд

>>> tw.waste_time (999)
>>>
  

ПозТС Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° класса, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ @singleton , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса.

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π»ΠΎΠΆΠΈΠ² ΠΈΡ… Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°:

  ΠΈΠ· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import debug, do_twice

@ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ
@do_twice
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ выполняСмых Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ пСрСчислСны.Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, @debug Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ @do_twice , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ greet () ΠΈΠ»ΠΈ debug (do_twice (greet ())) :

>>>
  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("Π•Π²Π°")
Π’Ρ‹Π·ΠΎΠ² привСтствия ('Π•Π²Π°')
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π•Π²Π°
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π•Π²Π°
'ΠΏΡ€ΠΈΠ²Π΅Ρ‚' вСрнулся НСт
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ, Ссли ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ порядок @debug ΠΈ @do_twice :

  ΠΈΠ· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import debug, do_twice

@do_twice
@ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  

Π’ этом случаС @do_twice Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΊ @debug :

>>>
  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("Π•Π²Π°")
Π’Ρ‹Π·ΠΎΠ² привСтствия ('Π•Π²Π°')
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π•Π²Π°
'ΠΏΡ€ΠΈΠ²Π΅Ρ‚' вСрнулся НСт
Π’Ρ‹Π·ΠΎΠ² привСтствия ('Π•Π²Π°')
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π•Π²Π°
'ΠΏΡ€ΠΈΠ²Π΅Ρ‚' вСрнулся НСт
  

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ .НапримСр, @do_twice ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΄ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @repeat (num_times) . Π—Π°Ρ‚Π΅ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство Ρ€Π°Π· выполнСния Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

  @repeat (num_times = 4)
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  
>>>
  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("ΠœΠΈΡ€")
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
  

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ этого Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ.

Π”ΠΎ сих ΠΏΠΎΡ€ имя, написанноС послС @ , ΠΎΡ‚Π½ΠΎΡΠΈΠ»ΠΎΡΡŒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ repeat (num_times = 4) , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ! Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

  def ΠΏΠΎΠ²Ρ‚ΠΎΡ€ (num_times):
    def decorator_repeat (функция):
        ... # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_repeat
  

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ, поэтому ΠΏΠΎΠ»Π½ΠΎΠ΅ написаниС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° даст Π²Π°ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π₯отя это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ эквивалСнтом Ρ„ΠΈΠ»ΡŒΠΌΠ° «Начало», ΠΌΡ‹ распутаСм всС это Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅:

  def ΠΏΠΎΠ²Ρ‚ΠΎΡ€ (num_times):
    def decorator_repeat (функция):
        @ functools.wraps (функция)
        def wrapper_repeat (* args, ** kwargs):
            для _ в диапазонС (num_times):
                Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_repeat
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_repeat
  

Π­Ρ‚ΠΎ выглядит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ бСспорядочно, Π½ΠΎ ΠΌΡ‹ помСстили Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый шаблон Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ def , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°.НачнСм с самой Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  def wrapper_repeat (* args, ** kwargs):
    для _ в диапазонС (num_times):
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  

Π­Ρ‚Π° функция wrapper_repeat () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ func () . Π­Ρ‚Π° функция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ num_times Ρ€Π°Π·. Π­Ρ‚ΠΎ Π½Π΅ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ num_times , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдоставлСн ΠΈΠ·Π²Π½Π΅.

Π‘Π΄Π΅Π»Π°Π² шаг Π²ΠΏΠ΅Ρ€Π΅Π΄, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°:

  def decorator_repeat (func):
    @ functools.wraps (функция)
    def wrapper_repeat (* args, ** kwargs):
        ...
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_repeat
  

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, decorator_repeat () выглядит Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ написали Ρ€Π°Π½Π΅Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°Π·Π²Π°Π½ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ имя - repeat () - для самой внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

Как Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, самая внСшняя функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€:

  def ΠΏΠΎΠ²Ρ‚ΠΎΡ€ (num_times):
    def decorator_repeat (функция):
        ...
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_repeat
  

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ repeat () происходит нСсколько Ρ‚ΠΎΠ½ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ:

  • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ decorator_repeat () Π² качСствС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ repeat () Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - decorator_repeat .Π Π°Π½Π΅Π΅ ΠΌΡ‹ использовали repeat Π±Π΅Π· скобок для ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.
  • АргумСнт num_times , ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² самом repeat () . Но ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ num_times создаСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сохраняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ num_times Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ использовано ΠΏΠΎΠ·ΠΆΠ΅ wrapper_repeat () .

Когда всС настроСно, посмотрим, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ:

  @repeat (num_times = 4)
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  
>>>
  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("ΠœΠΈΡ€")
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€
  

Как Ρ€Π°Π· Ρ‚ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ.

Оба, поТалуйста, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ внимания Π½Π° Ρ…Π»Π΅Π±

Π‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ , Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Π°ΠΌ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ приятно.

Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ внСшнюю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π—Π°Π΄Π°Ρ‡Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ», Π±Ρ‹Π» Π»ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π·Π²Π°Π½ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ….

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция для ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΡ пСрСдаСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ вызываСтся Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², функция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ синтаксиса * , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами:

  def имя (_func = None, *, kw1 = val1, kw2 = val2, ...): # 1
    def decorator_name (func):
        ... # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ.

    Ссли _func Ρ€Π°Π²Π½ΠΎ None:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_name # 2
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ имя_Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° (_func) # 3
  

Π—Π΄Π΅ΡΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ _func дСйствуСт ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, отмСчая, Π±Ρ‹Π» Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚:

  1. Если name Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², дСкорированная функция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° ΠΊΠ°ΠΊ _func .Если ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‚ΠΎΠ³Π΄Π° _func Π±ΡƒΠ΄Π΅Ρ‚ None , ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ… значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Число * Π² спискС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.
  2. Π’ этом случаС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, которая ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.
  3. Π’ этом случаС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НСмСдлСнно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот шаблон Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π΅ @repeat ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  def repeat (_func = None, *, num_times = 2):
    def decorator_repeat (функция):
        @ functools.wraps (функция)
        def wrapper_repeat (* args, ** kwargs):
            для _ в диапазонС (num_times):
                Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_repeat

    Ссли _func Ρ€Π°Π²Π½ΠΎ None:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_repeat
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_repeat (_func)
  

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с исходным @repeat .ЕдинствСнныС измСнСния - это Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ _func ΠΈ , Ссли - , ΠΈΠ½Π°Ρ‡Π΅ Π² ΠΊΠΎΠ½Ρ†Π΅.

Π Π΅Ρ†Π΅ΠΏΡ‚ 9.6 ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΏΠΎΠ²Π°Ρ€Π΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ functools.partial () .

Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ @repeat Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ…:

  @repeat
def say_whee ():
    print ("Π£Ρ„!")

@repeat (num_times = 3)
def greet (имя):
    print (f "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {имя}")
  

Напомним, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ num_times - 2:

>>>
  >>> say_whee ()
Ой!
Ой!

>>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ("ПСнни")
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ПСнни
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ПСнни
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ПСнни
  

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ с отслСТиваниСм состояния

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС .Π’ качСствС простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ создадим Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подсчитываСт количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ Π½Π°Ρ‡Π°Π»Π΅ этого руководства ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ чистых функциях, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° основС Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ с отслСТиваниСм состояния ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹, Π³Π΄Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы для сохранСния состояния. Но Π² простых случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def count_calls (func):
    @functools.обСртывания (func)
    def wrapper_count_calls (* args, ** kwargs):
        wrapper_count_calls.num_calls + = 1
        print (f "Π’Ρ‹Π·ΠΎΠ² {wrapper_count_calls.num_calls} ΠΈΠ· {func .__ name __! r}")
        return func (* args, ** kwargs)
    wrapper_count_calls.num_calls = 0
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_count_calls

@count_calls
def say_whee ():
    print ("Π£Ρ„!")
  

БостояниС - количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - хранится Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ .num_calls Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π’ΠΎΡ‚ эффСкт ΠΎΡ‚ Π΅Π³ΠΎ использования:

>>>
  >>> say_whee ()
Π’Ρ‹Π·ΠΎΠ² 1 ΠΈΠ· say_whee
Ой!

>>> say_whee ()
Π’Ρ‹Π·ΠΎΠ² 2 ΠΈΠ· "say_whee"
Ой!

>>> say_whee.num_calls
2
  

ΠšΠ»Π°ΡΡΡ‹ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ способ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ @count_calls ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс Π² качСствС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° .

Напомним, Ρ‡Ρ‚ΠΎ синтаксис Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @my_decorator - это просто Π±ΠΎΠ»Π΅Π΅ простой способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ func = my_decorator (func) . Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли my_decorator являСтся классом, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ func Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² своСм .__init __ () ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, экзСмпляр класса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ экзСмпляр класса Π±Ρ‹Π» Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ, Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ .__ call __ () :

  класс Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ:
    def __init __ (self, start = 0):
        self.count = start

    def __call __ (сам):
        self.count + = 1
        print (f "Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство: {self.count}")
  

ΠœΠ΅Ρ‚ΠΎΠ΄ .__ call __ () выполняСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ экзСмпляр класса:

>>>
  >>> counter = Counter ()
>>> счСтчик ()
Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство - 1

>>> счСтчик ()
Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство - 2

>>> счСтчик.ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ
2
  

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, типичная рСализация класса Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ .__ init __ () ΠΈ .__ call __ () :

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

класс CountCalls:
    def __init __ (self, func):
        functools.update_wrapper (сам, функция)
        self.func = func
        self.num_calls = 0

    def __call __ (self, * args, ** kwargs):
        self.num_calls + = 1
        print (f "Π’Ρ‹Π·ΠΎΠ² {self.num_calls} ΠΈΠ· {self.func .__ name __! r}")
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сСбя.func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)

@CountCalls
def say_whee ():
    print ("Π£Ρ„!")
  

ΠœΠ΅Ρ‚ΠΎΠ΄ .__ init __ () Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылку Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. ВмСсто Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ .__ call __ () . По сути, ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ функция wrapper () Π² Π½Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ functools.update_wrapper () вмСсто @functools.обСртывания .

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @CountCalls Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅:

>>>
  >>> say_whee ()
Π’Ρ‹Π·ΠΎΠ² 1 ΠΈΠ· say_whee
Ой!

>>> say_whee ()
Π’Ρ‹Π·ΠΎΠ² 2 ΠΈΠ· "say_whee"
Ой!

>>> say_whee.num_calls
2
  

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°

ΠœΡ‹ Π΄Π°Π»Π΅ΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΠ»ΠΈΡΡŒ, ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π², ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всС Π²ΠΈΠ΄Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΈ Π²Π»ΠΎΠΆΠΈΠΌ наши Π½ΠΎΠ²Ρ‹Π΅ знания Π² созданиС Π΅Ρ‰Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅.

Код замСдлСния, Π΅Ρ‰Π΅ Ρ€Π°Π·

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, наша прСдыдущая рСализация @slow_down всСгда спит Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ сСкунды. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ @slow_down , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ rate , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ½ спит:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def slow_down (_func = None, *, rate = 1):
    "" "Π‘ΠΏΠ°Ρ‚ΡŒ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство сСкунд ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ" ""
    def decorator_slow_down (функция):
        @functools.обСртывания (func)
        def wrapper_slow_down (* args, ** kwargs):
            time.sleep (ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ)
            return func (* args, ** kwargs)
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_slow_down

    Ссли _func Ρ€Π°Π²Π½ΠΎ None:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_slow_down
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_slow_down (_func)
  

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ шаблон, прСдставлСнный Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Оба, поТалуйста, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ внимания Π½Π° Ρ…Π»Π΅Π±", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ @slow_down Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΊΠ°ΠΊ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…. Π’Π° ΠΆΠ΅ самая рСкурсивная функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ отсчСта () , Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ спит ΠΏΠΎ Π΄Π²Π΅ сСкунды ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ отсчСтом:

  @slow_down (коэффициСнт = 2)
ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт def (from_number):
    Ссли from_number <1:
        print ("Π’Π·Π»Π΅Ρ‚!")
    Π΅Ρ‰Π΅:
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (from_number)
        ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (from_number - 1)
  

Как ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°:

>>>
  >>> ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (3)
3
2
1
Π’Π·Π»Π΅Ρ‚!
  

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ синглтонов

Π‘ΠΈΠ½Π³Π»Ρ‚ΠΎΠ½ - это класс с ΠΎΠ΄Π½ΠΈΠΌ экзСмпляром.Π’ Python Π΅ΡΡ‚ΡŒ нСсколько синглтонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Π² Ρ‚ΠΎΠΌ числС None , True ΠΈ False . Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ None - это синглтон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ None с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова is , ΠΊΠ°ΠΊ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Оба, поТалуйста:

 , Ссли _func Ρ€Π°Π²Π½ΠΎ None:
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_name
Π΅Ρ‰Π΅:
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ имя_Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° (_func)
  

ИспользованиС is Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ экзСмпляром.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @singleton ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ класс Π² синглтон, сохраняя ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ экзСмпляр класса ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ создания экзСмпляра просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ сохранСнный экзСмпляр:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

def singleton (cls):
    "" "Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ класс Singleton-классом (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр)" ""
    @ functools.wraps (cls)
    def wrapper_singleton (* args, ** kwargs):
        Ссли нС wrapper_singleton.instance:
            wrapper_singleton.instance = cls (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_singleton.ΠΏΡ€ΠΈΠΌΠ΅Ρ€
    wrapper_singleton.instance = НСт
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_singleton

@singleton
класс TheOne:
    ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
  

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, этот Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ классов слСдуСт Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ cls вмСсто func Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° класса.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ:

>>>
  >>> first_one = TheOne ()
>>> another_one = TheOne ()

>>> id (first_one)
140094218762280

>>> id (Π΄Ρ€ΡƒΠ³ΠΎΠΉ_ΠΎΠ½)
140094218762280

>>> first_one это Π΄Ρ€ΡƒΠ³ΠΎΠΉ_one
ΠŸΡ€Π°Π²Π΄Π°
  

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ first_one Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ являСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ экзСмпляром, Ρ‡Ρ‚ΠΎ ΠΈ another_one .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Singleton-классы Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Ρ‚Π°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Python, ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. Π­Ρ„Ρ„Π΅ΠΊΡ‚ синглтона ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅.

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ запоминания. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ:

  ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² import count_calls

@count_calls
def fibonacci (число):
    Ссли число <2:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 1) + Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 2)
  

Π₯отя рСализация проста, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния уТасна:

>>>
  >>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (10)
<Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ объСм Π²Ρ‹Π²ΠΎΠ΄Π° count_calls>
55

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.num_calls
177
  

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ дСсятоС число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, Π½ΠΎ эта рСализация ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ†Π΅Π»Ρ‹Ρ… 177 вычислСний. Быстро становится Ρ…ΡƒΠΆΠ΅: трСбуСтся 21891 расчСт для Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (20) ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ 2,7 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° вычислСний для 30-Π³ΠΎ числа. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ извСстныС числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ с использованиСм Ρ†ΠΈΠΊΠ»Π° для ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ поиска.Однако простоС ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ вычислСний Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
ΠΈΠ· Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ count_calls

def кСш (функция):
    "" "Π‘ΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ кСш ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ" ""
    @ functools.wraps (функция)
    def wrapper_cache (* args, ** kwargs):
        cache_key = Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ + ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (kwargs.items ())
        Ссли cache_key отсутствуСт Π² wrapper_cache.cache:
            wrapper_cache.cache [cache_key] = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_cache.cache [cache_key]
    wrapper_cache.кСш = dict ()
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_cache

@cache
@count_calls
def fibonacci (число):
    Ссли число <2:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 1) + Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 2)
  

Кэш Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ справочная Ρ‚Π°Π±Π»ΠΈΡ†Π°, поэтому Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ fibonacci () выполняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ вычислСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·:

>>>
  >>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (10)
Π’Ρ‹Π·ΠΎΠ² 1 ΠΈΠ· 'fibonacci'
...
Π—Π²ΠΎΠ½ΠΈΡ‚Π΅ 11 ΠΈΠ· 'fibonacci'
55

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (8)
21 Π³ΠΎΠ΄
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ послСднСм Π²Ρ‹Π·ΠΎΠ²Π΅ fibonacci (8) Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… вычислСний Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ восьмоС число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ вычислСно для fibonacci (10) .

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ кэш Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… (LRU) доступСн ΠΊΠ°ΠΊ @ functools.lru_cache .

Π£ этого Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° большС возмоТностСй, Ρ‡Π΅ΠΌ Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @ functools.lru_cache вмСсто написания собствСнного Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° кСша:

  Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

@ functools.lru_cache (maxsize = 4)
def fibonacci (число):
    print (f "ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ ({num})")
    Ссли число <2:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 1) + Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (число - 2)
  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ maxsize ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько послСдних Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - 128, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ maxsize = None , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Однако ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ссли Π²Ρ‹ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .cache_info () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ кэш, ΠΈ ΠΏΡ€ΠΈ нСобходимости Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали искусствСнно малСнький maxsize , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт удалСния элСмСнтов ΠΈΠ· кСша:

>>>
  >>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (10)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (10)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (9)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (8)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (7)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (6)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (5)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (4)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (3)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (2)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (1)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (0)
55

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (8)
21 Π³ΠΎΠ΄

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (5)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (5)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (4)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (3)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (2)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (1)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (0)
5

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (8)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (8)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (7)
ВычислСниС Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (6)
21 Π³ΠΎΠ΄

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (5)
5

>>> Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. 3")
объСм def (радиус, высота):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ.3 ":
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ math.pi * radius ** 2 * height
  

Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для подсказок Ρ‚ΠΈΠΏΠ°, Π±Ρ‹Π»ΠΎ Π±Ρ‹ слоТно ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΊΠ°ΠΊ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ статичСского Ρ‚ΠΈΠΏΠ°.

Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ становятся Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ ΠΈ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ связаны с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Одна такая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° - ΠΏΠΈΠ½Ρ‚Ρ‹ . Если установлСно ΠΏΠΈΠ½Ρ‚Ρ‹ ( ΠΏΠΈΠ½Ρ‚Π° установит ΠΏΠΈΠ½Ρ‚Ρƒ ), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ объСм Π² кубичСскиС Π΄ΡŽΠΉΠΌΡ‹ ΠΈΠ»ΠΈ Π³Π°Π»Π»ΠΎΠ½Ρ‹:

>>>
  >>> импортная ΠΏΠΈΠ½Ρ‚Π°
>>> ΡƒΡ€Π΅Π³ = ΠΏΠΈΠ½Ρ‚Π°.UnitRegistry ()
>>> vol = volume (3, 5) * ureg (volume.unit)

>>> Ρ‚ΠΎΠΌ
<ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (141,3716694115407, 'сантимСтр ** 3')>

>>> vol.to ("кубичСскиС Π΄ΡŽΠΉΠΌΡ‹")
<ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (8,627028576414954, дюйм ** 3 дюйма)>

>>> vol.to ("Π³Π°Π»Π»ΠΎΠ½Ρ‹"). m # Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π°
0,0373464440537444
  

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» ΠΏΠΈΠ½Ρ‚Ρ‹ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π’Π°ΠΊΠΎΠ΅ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ получаСтся ΠΏΡƒΡ‚Π΅ΠΌ умноТСния значСния Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π’ ΠΏΠΈΠ½Ρ‚Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² UnitRegistry .РССстр хранится ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Ρ‚ΡŒ пространство ΠΈΠΌΠ΅Π½:

  def use_unit (unit):
    "" "Π—Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ количСство с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ измСрСния" ""
    use_unit.ureg = pint.UnitRegistry ()
    def decorator_use_unit (функция):
        @ functools.wraps (функция)
        def wrapper_use_unit (* args, ** kwargs):
            Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = func (* Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ** kwargs)
            Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ * use_unit.ureg (unit)
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_use_unit
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_use_unit

@use_unit (Β«ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² сСкунду»)
def average_speed (расстояниС, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ):
    расстояниС / ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°
  

Π‘ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ @use_unit ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ† практичСски Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ усилий:

>>>
  >>> bolt = average_speed (100, 9.58)
>>> Π±ΠΎΠ»Ρ‚
<ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (10,438413361169102, Β«ΠΌΠ΅Ρ‚Ρ€ Π² сСкунду»)>

>>> bolt.to ("ΠΊΠΌ Π² час")
<ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (37,578288100208766, "ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€ / час")>

>>> bolt.to ("миль / Ρ‡"). m # Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π°
23.35006567

45

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° JSON

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° послСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования. ВзглянитС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° Flask:

  @ app.route ("/ grade", methods = ["POST"])
def update_grade ():
    json_data = request.get_json ()
    Ссли "student_id" отсутствуСт Π² json_data:
        ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ (400)
    # ОбновлСниС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "успСх!"
  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ student_id являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ запроса.Π₯отя эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ½Π° Π½Π΅ относится ΠΊ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ оставим Π΅Π³ΠΎ Π‘Π£Π₯ИМ ΠΈ абстрагируСм Π½Π΅Π½ΡƒΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @validate_json Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ:

  ΠΈΠ· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΊΠΎΠ»Π±Ρ‹ Flask, request, abort
import functools
app = Flask (__ имя__)

def validate_json (* ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅_Π°Ρ€Π³ΠΈ): # 1
    def decorator_validate_json (func):
        @functools.обСртывания (func)
        def wrapper_validate_json (* args, ** kwargs):
            json_object = request.get_json ()
            для ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ_Π°Ρ€Π³Π° Π² ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌ_Π°Ρ€Π³: # 2
                Ссли ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ_Π°Ρ€Π³ отсутствуСт Π² json_object:
                    ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ (400)
            return func (* args, ** kwargs)
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ wrapper_validate_json
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ decorator_validate_json
  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строковых Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт ΠΊΠ»ΡŽΡ‡, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… JSON:

  1. Бписок ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² JSON, пСрСдаСтся Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρƒ.
  2. Ѐункция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² Π΄Π°Π½Π½Ρ‹Ρ… JSON.

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° своСй Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ - ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΡ†Π΅Π½ΠΎΠΊ - ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ JSON Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹:

  @ app.route ("/ grade", methods = ["POST"])
@validate_json ("student_id")
def update_grade ():
    json_data = request.get_json ()
    # ОбновлСниС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "успСх!"
  

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ настоящСС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅! Π’Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ это руководство с Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² частности Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Python.Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹:

  • Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.
  • Они ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ значСниями.
  • Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @ functools.wraps , Ρ‡Ρ‚ΠΎΠ±Ρ‹ большС ΠΏΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части руководства Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ:

  • Π”Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ классы
  • Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π³Π½Π΅Π·Π΄
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ
  • Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ…
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ для опрСдСлСния Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ опрСдСляСтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ.Ѐункция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ * args ΠΈ ** kwargs для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’ этом случаС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ получаСтся Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ΄ ΠΈΠ· этого руководства Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Если Π²Ρ‹ всС Π΅Ρ‰Π΅ ΠΈΡ‰Π΅Ρ‚Π΅ большС, Π² нашСй ΠΊΠ½ΠΈΠ³Π΅ Python Tricks Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ…, ΠΊΠ°ΠΊ ΠΈ Π² ΠŸΠΎΠ²Π°Ρ€Π΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Python Дэвида Π‘ΠΈΠ·Π»ΠΈ ΠΈ Π‘Ρ€Π°ΠΉΠ°Π½Π° К.ДТонс.

Для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ погруТСния Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΠΈΡΠΊΡƒΡΡΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Python, см. PEP 318, Π° Ρ‚Π°ΠΊΠΆΠ΅ Python Decorator Wiki. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Python. ΠœΠΎΠ΄ΡƒΠ»ΡŒ decorator ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ созданиС Π²Π°ΡˆΠΈΡ… собствСнных Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π° Π΅Π³ΠΎ докумСнтация содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ составили для вас Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΈ ΠΌΠΈΠ»ΡƒΡŽ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΡƒ ΠΏΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Python:

Класс

ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π² Python

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ - ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ инструмСнт Π² Python, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ позволяСт программистам ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса.Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±Π΅Π· Π΅Π΅ постоянного измСнСния.
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΊΠ°ΠΊ класс, для этого ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ классов __call__. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ функция, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ функция, поэтому __call__ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. НапримСр

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊ! Π£ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ свои основы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python Programming Foundation ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основы.

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ собСсСдованию. Π Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ свои ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python DS . А Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ своС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ курсу МашинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Python3

класс MyDecorator:

def 9000__ (self , функция):

self .функция = функция

def __call __ ( self ):

000 9 9 .function ()

@MyDecorator

def function ():

"ks ks 9 )

function ()


Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ классов с * args ΠΈ ** kwargs:
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ класса с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ * args ΠΈ ** kwargs, ΠΌΡ‹ использовали __call__ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» ΠΎΠ±Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ f unction

Python3

класс MyDecorator:

def __init __ ( 000 9000 9000 9.функция = функция

def __call __ ( self , * args, * *

0

self .function ( * args, * * kwargs)

000

000

@MyDecorator

def функция (имя, сообщСниС = 'Hello' ):

print ({}, {} } " . Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (сообщСниС, имя))

функция ( Β«geeks_for_geeksΒ» , Β«ΠΏΡ€ΠΈΠ²Π΅Ρ‚Β» )

helloeks, Π²Ρ‹Ρ…ΠΎΠ΄:


Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ класса с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°:
Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ, поэтому Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return с Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ класса.

Python3

класс SquareDecorator:

def __init __ ( self 09) функция = функция

def __call __ ( self , * args, * * kwargs3)

Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = self .функция ( * Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², * * ΠΊΠ²Π°Ρ€Π³ΠΎΠ²)

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

000

9000

def get_square (n):

print ( "Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число:" , n)

return n *

n

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( "ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ числа:" , get_square ( 195 ))

Π’Ρ‹Π²ΠΎΠ΄:
 Π΄Π°Π½Π½ΠΎΠ΅ число: 195
ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ числа: 38025 


ИспользованиС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² классов для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ВрСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:
Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __call__ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Python3

ΠΈΠ· врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚ врСмя

класс Π’Π°ΠΉΠΌΠ΅Ρ€:

__init __ ( self , func):

self .функция = func

def __call __ ( self , * args, * * 9000 9wargs) start_time = time ()

Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = self .function ( * args, * * kwargs) 9000

end_time = time ()

print ( Β«Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ заняло {} сСкунд» . Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (end_time - start_time))

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

@Timer

some_deffunction ΠΈΠ· врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚ сон

спящий Ρ€Π΅ΠΆΠΈΠΌ (Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°)

109

Π’Ρ‹Π²ΠΎΠ΄:
 Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ заняло 3.0031220335 сСкунд 


ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° класса:
Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто. Π­Ρ‚ΠΎΡ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ провСряСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдотвращая ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ позволяСт Π΅ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ логичСскиС ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

Python3

класс ErrorCheck:

def __init __ (

9000 9.функция = функция

def __call __ ( self , * params):

Ссли Ссли isinstance (i, str ) для i в params]):

raise TypeError ( "ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой !!" )

Π΅Ρ‰Π΅ :

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ self .функция ( * params)

@ErrorCheck

def add_numbers ( * Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ²):

* Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² )

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ( 1 , 2 , 3 ))

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ 10 10 (Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° (Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π°) '2' , 3 ))

Π’Ρ‹Ρ…ΠΎΠ΄:

 6
TypeError: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой !! 


Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€