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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² Python ΠΏΠ»ΠΎΡ…ΠΎΠΉ ООП / Π₯Π°Π±Ρ€

Π’ Python уТасный ООП. ΠšΠ»ΠΈΠΊΠ±Π΅ΠΉΡ‚Π½Ρ‹ΠΉ тСзис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° сущСствованиС. Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ языков, Π³Π΄Π΅ ООП прСдставлСн Π½Π΅ Π² самом классичСском Π²ΠΈΠ΄Π΅, Π½Ρƒ ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ принято ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ JavaScript ΠΈ Lua, Golang с ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅. Но Β«Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ всС» всСгда Π»ΠΈ синоним слова Β«Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΒ»?Β  Π‘ Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ вязли, Ρ‡Ρ‚ΠΎ ООП Π² Python Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ООП? Π§Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ являСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ отсчёта Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈΒ» ООП? Smalltalk ΠΈΠ»ΠΈ SimulaΒ 67? Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это просто ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°.. ΠΈΠ»ΠΈ ΡƒΠΆΠ΅ Π΄ΠΎΠ³ΠΌΠ°?

Π’ этом ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ:

  • Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ с ООП Π² Python;

  • Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ООП отличаСтся ΠΎΡ‚ языков с эталонной ΠΏΠΎ мнСнию ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ООП: Java, C# ΠΈ Π‘++;

  • ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка Python Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всё ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот тСкст Π°Π²Ρ‚ΠΎΡ€ YouTube-ΠΊΠ°Π½Π°Π»Π° PyLounge Макс. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

ДисклСймСр: Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹ΡΠΊΠ°Π·Π°Ρ‚ΡŒ свои «Ρ€Π°ΡΡΡƒΠΆΠ΄Π΅Π½ΠΈΡ Π½Π° Ρ‚Π΅ΠΌΡƒ» ΠΈ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅ обладаю ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΠΈΠ΅ΠΉ Π½Π° истину. Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΠΎΡΡƒΠ΄ΠΈΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π² коммСнтариях.

Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ. Π§Π΅ΠΌ ООП Π² Python отличаСтся ΠΎΡ‚ классичСской ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ЯП.

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ООП появилась Π΅Ρ‰Ρ‘ 60-70-Ρ… Π³ΠΎΠ΄Π°Ρ… XX Π²Π΅ΠΊΠ°. ООП ΠΈΠ»ΠΈ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированноС программированиС — это мСтодология программирования, которая основана прСдставлСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся экзСмпляром класса, Π° классы ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚Β ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽΒ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ особСнностями ООП являСтся понятия:

  • абстракция;Β 

  • инкапсуляция;Β 

  • наслСдованиС;Β 

  • ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

Алан Кэй, создатСля языка Smalltalk, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Β«ΠΎΡ‚Ρ†ΠΎΠ²-основатСлСй» ООП, Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ ООП ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π±ΠΎΡ€Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

  1. Всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

  2. ВычислСния ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Ρ‘ΠΌ взаимодСйствия (ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ) ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСйствиС.

  3. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая состоит ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

  4. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся прСдставитСлСм класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈΠ»ΠΈ списки).

  5. Π’ классС задаётся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΌ самым всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия.

  6. ΠšΠ»Π°ΡΡΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠΎΡ€Π½Π΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ наслСдования. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, связанноС с экзСмплярами ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ класса, автоматичСски доступны Π»ΡŽΠ±ΠΎΠΌΡƒ классу, располоТСнному Π½ΠΈΠΆΠ΅ Π² иСрархичСском Π΄Π΅Ρ€Π΅Π²Π΅.

«ООП для мСня ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ лишь ΠΎΠ±ΠΌΠ΅Π½ сообщСниями, локальноС сохранСниС, ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π°, ΠΈ скрытиС состояния, ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС». (c) Алан Кэй

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² соотвСтствии с идСями Алана Кэя, самыми Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ООП являСтся:

  1. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ взаимодСйствиС).

  2. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ.

  3. ДинамичСскоС связываниС.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ указываСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ связываниС, Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² наслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π½Π΅Ρ‚. Π’Π΅Π΄ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π±Ρ‹Π²Π°Π΅Ρ‚ статичСский (Ρ€Π°Π½Π½Π΅Π΅ связываниС) – это ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹). Β Π’ΠΎ Π΅ΡΡ‚ΡŒ Кэй, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСтся ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «ООП» Π½Π΅ считал Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ частями ООП наслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ условны,Β Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΡ‹Ρ‚Ρ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ идСя ООП состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ свой статус Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΈ ΠΎΠ½ΠΈ связаны с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ мноТСством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ статусом ΠΈ для связи с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° появились ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки. Π―Π·Ρ‹ΠΊΠΈ OO Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. И ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ инструмСнты ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ООП β€” классы Π±Ρ‹Π»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов.

Под инкапсуляциСй стали ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ классов ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² сСбС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСпосрСдствСнно связаны с этим классом ΠΏΠΎ смыслу. Β ΠŸΡ€ΠΈ этом ΠΎΠ΄Π½ΠΈ языки соотносят ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ с сокрытиСм этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ (Smalltalk,Β Eiffel,Β OCaml) Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ эти понятия.

НапримСр, Π² Java ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅, ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π»Π΅Π½Π°ΠΌ этого класса. Π’Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π‘++, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ концСпция Π΄Ρ€ΡƒΠ·Π΅ΠΉ (friend), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ поля Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, Ρ‡Ρ‚ΠΎ сильно критикуСтся.

НаслСдованиС — свойство систСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс Π½Π° основС ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ с частично ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ заимствованной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΒ β€” это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ классам, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ «ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. На самом Π΄Π΅Π»Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄ зависит ΠΎΡ‚ класса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ понимаСтся мноТСство Ρ„ΠΎΡ€ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ слова – ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

АбстрагированиС (абстракция Π΄Π°Π½Π½Ρ‹Ρ…) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· рассмотрСния Π½Π΅Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ. Π’ ООП Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, подразумСвая Π½Π°Π±ΠΎΡ€ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… характСристик ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, доступных ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠšΠ»Π°ΡΡΒ β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ, комплСксный тип Π΄Π°Π½Π½Ρ‹Ρ…, состоящий ΠΈΠ· тСматичСски Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Β«ΠΏΠΎΠ»Π΅ΠΉΒ» (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ элСмСнтарных Ρ‚ΠΈΠΏΠΎΠ²) ΠΈ Β«ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β» (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими полями), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ являСтся модСлью ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сущности с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΠΌΒ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ°ΠΌΠΈΒ Π΄Π»Ρ опСрирования своим содСрТимым (значСниями ΠΏΠΎΠ»Π΅ΠΉ).

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ ООП находится ΠΏΠΎΠ½ΡΡ‚ΠΈΠ΅Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.Β ΠžΠ±ΡŠΠ΅ΠΊΡ‚Β β€” это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сообщСния ΠΈ которая ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° Π½ΠΈΡ… Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свои Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Β β€” это экзСмпляр класса. Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° содСрТатся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π° Π½Π΅ просто Π»Π΅ΠΆΠ°Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Β Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя сокрытиС (Π½ΠΎ ΠΈΠΌ Π½Π΅ являСтся!).

ООП пытаСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Β«Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€Β», ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

БоврСмСнная идСя ООП β€” это синтСз всСх ΠΈΡ… ΠΈΠ΄Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ΄Π΅ΠΉ Π“ΠΎΠ»Π΄Π±Π΅Ρ€Π³Π°, Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков, Дэвида ΠŸΠ°Ρ€Π½Π°ΡΠ°, Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½Π° ΠœΠ΅ΠΉΠ΅Ρ€Π°, Π“ΡŽΠ»Ρ Ага ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Но Π½ΠΈΠΊΡ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ «ООП». Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ эти инструмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ.

А Ρ‡Ρ‚ΠΎ ΠΆΠ΅ касаСмо Python. Python ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ удовлСтворяСт всСм пСрСчислСнным Π²Ρ‹ΡˆΠ΅ трСбования, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ являСтся Β«ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΒ». ООП – просто ΡΡ‚ΠΈΠ»ΡŒ.

Однако Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΡˆΠΊΠΈ ООП, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ООП Π·Π° счёт ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… языках, нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Python.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа

Π’ Python отсутствуСт Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Β  МногиС Π²Π΅Ρ‰ΠΈ Π² Python основаны Π½Π° ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ…. Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… рСализуСтся чисто ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. Π—Π° счёт соглашСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Ρƒ свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹). Π”Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ°Π½Π³Π»ΠΈΠ½Π³. Чисто тСхничСски это Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ прямой доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΡ€ΠΈΠ²Π°Ρ‚, Π½ΠΎ это скорСС ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ Π°Π΄Π΅ΠΏΡ‚Π°ΠΌΠΈ классичСского ООП «грязный Ρ…Π°ΠΊΒ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Python Π½Π΅Ρ‚ классичСского раздСлСния Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ доступа, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Python довСряСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Π’ этом ΠΏΠ»Π°Π½Π΅ Python Π±Π»ΠΈΠΆΠ΅ ΠΊ Π‘++.

Β«Π”Π°, я знаю, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ моТСшь Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, Π½ΠΎ я Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ этого Π½Π΅ сдСлаСшь. Π’Π΅Π΄ΡŒ Π½Π΅ Π΄Π°Ρ€ΠΎΠΌ Ρ‚Ρ‹ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π½Π°Π», ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ написанию ΠΊΠΎΠ΄Π°Β». (с) Python

МнС каТСтся, инкапсуляция Π½Π΅ Ρ‚Π°ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² языкС с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.  ВыскаТу нСпопулярноС ΠΌΠ½Π΅Π½ΠΈΠ΅ – это Π½Π΅ добавляСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ бСзопасности, ΠΎΠ½Π° просто Π΄Π°Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ бСзопасности. Если Π²Ρ‹ Π³Ρ€Π°ΠΌΠΎΡ‚Π½Ρ‹ΠΉ программист, Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ сдСлаСтС всё ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ.

Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ Β«ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒΒ»? ΠžΡ‚Π²Π΅Ρ‚ кроСтся Π² философии Python. Π“Π²ΠΈΠ΄ΠΎ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ. Как ΠΎΠ½ выразился Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ: Β«ΠΌΡ‹ всС здСсь взрослыС ΠΏΠΎ ΠΎΠ±ΠΎΡŽΠ΄Π½ΠΎΠΌΡƒ согласию. Python довСряСт Π²Π°ΠΌ. Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π­ΠΉ, Ссли Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΠ½Ρ‹Ρ… мСстах, я надСюсь, Ρ‡Ρ‚ΠΎ Ρƒ тСбя Π΅ΡΡ‚ΡŒ ΡƒΠ²Π°ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΈ Π²Ρ‹ Π½Π΅ создаСтС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΒ». Π­Ρ‚ΠΎΠ³ΠΎ тСзиса ΠΌΡ‹ Π΅Ρ‰Ρ‘ коснёмся Π½ΠΈΠΆΠ΅. Пока просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅.

Π’ΠΎΠΎΠ±Ρ‰Π΅ инкапсуляция – это Π½Π΅ совсСм ΠΏΡ€ΠΎ сокрытиС. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ опрСдСляСтся ΠΊΠ°ΠΊ «процСсс объСдинСния элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ классом» ΠΈΠ»ΠΈ Β«ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ описания». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, номинально Π² Python всё ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π²Π΅Ρ€Π½ΠΎ.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ интСрфСйсов

Π’ языкС Python Π½Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ конструкции ΠΊΠ°ΠΊ интСрфСйс (interface). К слову Π² Π‘++ ΠΈΡ… Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚. Но Ρ‡Ρ‚ΠΎ Π² Python, Ρ‡Ρ‚ΠΎ Π² Π‘++, Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсы.  АбстрактныС классы ­– это Ρ…ΠΎΡ‚ΡŒ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΈ допускаСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. На ΠΌΠΎΠΉ взгляд, отсутствиС интСрфСйсов искусствСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ избСТания нСоднозначности. Π’ΠΎΡ‚ Ρƒ тСбя Π΅ΡΡ‚ΡŒ абстрактныС классы, Π²ΠΎΡ‚ ΠΈΡ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ абстрактных классов ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всё Ρ‚ΠΎΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΈ с интСрфСйсами, Π½ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π’Π΅Π΄ΡŒ Python ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ простоты ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ всё лишнСС. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ языка Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ switch case Π²Ρ‹ΠΊΠΈΠ½ΡƒΠ»ΠΈ, Π΄Π°Π±Ρ‹ «ΠΌΠ΅ΡΡ‚ΠΎ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π»Π°».

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

МногиС соврСмСнныС языки ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ мноТСствСнного наслСдования, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ услоТняСт. Однако Python Ρ…ΠΎΡ‚ΡŒ ΠΈ ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ упрощСния, Π½ΠΎ стараСтся Π²Ρ‹ΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, вСдь любоС ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ β€” это потСря гибкости + см. ΠΏΡƒΠ½ΠΊΡ‚ ΠΏΡ€ΠΎ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ своСму Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Python Π΄ΡƒΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ достаточно ΡƒΠΌΡ‘Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈΡ‚ΡŒ Π³ΠΈΠ³Π°Π½Ρ‚ΡΠΊΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€ΠΎΠΌΠ±Π°. НС довСрился ΠΎΠ½ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ, ΠΏΡ€ΠΈ создании GIL. Но спишСм это Π½Π° ошибки молодости. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π‘++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСствСнноС наслСдованиС. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ с этим ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ всё Ρ‚ΠΎΠΆΠ΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π·Π°ΠΊΠΎΠ½Π°.

Утиная типизация

Она, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊ Ρ‚Π΅ΠΌΠ΅ относится косвСнно. Но, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, рядом с Python всСгда всплываСт понятиС ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Β 

Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ выглядит ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ°, ΠΏΠ»Π°Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ° ΠΈ крякаСт ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ°, это навСрняка ΠΈ Π΅ΡΡ‚ΡŒ ΡƒΡ‚ΠΊΠ°.

Утиная Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡΒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вмСсто провСрки Ρ‚ΠΈΠΏΠ°Β Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π² Python ΠΌΡ‹ склонны ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ и пСрСхватывая ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’ΡƒΡ‚ Π²ΠΎ всСй красС дСмонстрируСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π”Π·Π΅Π½Π° Python β€” «явноС Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ нСявноС». Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ выглядит ΠΊΠ°ΠΊ ΡƒΡ‚ΠΊΠ° ΠΈ крякаСт, Ρ‚ΠΎ это ΡƒΡ‚ΠΊΠ°, ΠΊ Ρ‡Π΅ΠΌΡƒ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² ΡΠΊΠ·ΠΈΡΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ копания ΠΈ вопросы самоопрСдСлСния? Π‘ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ посмотри ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒΒ DuckΒ ΠΈΒ Human это Ρ€Π°Π·Π½Ρ‹Π΅ классы, Python ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ fly_quack() для экзСмпляра класса Human. И хотя класс HumanΒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹Β quackΒ ΠΈΒ flyΒ , Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈ поэтому всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

НСт способов ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния класса ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса (константныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹), снова всё полагаСтся Π½Π° Π΄ΠΎΠ±Ρ€ΡƒΡŽ волю программиста.

Π’ΠΎΠΎΠ±Ρ‰Π΅ Π΄ΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎ Ρ‡Π΅Π³ΠΎ. НапримСр, Π½Π΅ совсСм стандартноС описаниС статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self, MRO ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Но Python ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ всСм трСбованиям ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ООП. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ всСх. Но Π½Π° Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. Β Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° языка мотивировался Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌ Π”Π·Π΅Π½ΠΎΠΌ Python, Π³Π΄Π΅ простоС Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ слоТноС, явноС Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ явного ΠΈ Ρ‚.Π΄. Π§Π΅Ρ€Π΅Π· эту Ρ„ΠΈΠ»ΠΎΡΠΎΡ„ΠΈΡŽ красной Π½ΠΈΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ структура всСго языка Python.

The Zen of Python

Python Π·Π°Π΄ΡƒΠΌΠ°Π½ ΠΊΠ°ΠΊ Π³ΠΈΠ±Ρ€ΠΈΠ΄. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилях. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Ρ‚Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ абстракция, инкапсуляция, наслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π§Ρ‚ΠΎ ΠΈΠ· этого отсутствуСт Π² Python?

По мнСнию ΠΌΠ½ΠΎΠ³ΠΈΡ… Smalltalk β€” самый чистый ООП язык, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ ΠΈ ΠΊΠ°ΠΊΠΎΠ²Π° Ρ†Π΅Π½Π° этой чистоты? МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ Π½Π° Smalltalk, Ρ‚Π°ΠΊ ΠΈ Π½Π° Python.

Python ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½. Вводятся ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π±Π΅Π· особого внимания ΠΊ тСологичСским концСпциям, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½Β» ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π­Ρ‚ΠΎ язык для людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ быстро ΠΈ просто, Π° ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ ΠΎΠ½ΠΎ Β«ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΒ» Π²Π΅Ρ€Π½ΠΎ, ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ»Π°Π½.

Π•ΡΡ‚ΡŒ языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π΄Π²ΡƒΡ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² развития: Π΄ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, Π΄Π°ΡŽΡ‚ срСдства ΠΈ возмоТности, Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ своих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. И языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ максимуму всё Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Ρ‹Π»ΠΎ просто ΠΈ Ρ‚ΠΎΠΏΠΎΡ€Π½ΠΎ. ВсС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π²Π½ΠΎ приняты Π·Π° тСбя, всСм извСстно ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Golang. Π‘ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Β«ΠŸΠΎΡ‡Ρ‚ΠΈ всС Β«Ρ„ΠΈΡ‡ΠΈΒ» β€” это сахарная ΠΊΠΎΠ»Π°, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это толстяк с диабСтом»».

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

Python ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚Ρƒ ΠΌΠ°ΠΌΡƒ, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Ρ‚ΡƒΡΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠ»ΠΎΡ…ΠΈΠΌΠΈ Π΄Π΅Ρ‚ΡŒΠΌΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π½ΠΎΡ‡ΡŒΡŽ, Ссли Π²Ρ‹ осознаСтС послСдствия.

Он Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ свободный доступ ΠΊ свойствам класса, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ частными ΠΈΠ»ΠΈ константными, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ взрослый.

Π­Ρ‚ΠΎ извСчная Π΄ΠΈΠ»Π΅ΠΌΠΌΠ°: Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ авторитарная ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ свобода? ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° этот вопрос сам. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ подходящий для сСбя инструмСнт – язык программирования.

ООП Π² Python Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈ Π½Π΅ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языка. Он Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ Π²ΠΈΠ΄Π΅Π» Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ языка Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум. ООП Π² Python это Ρ‡Π°ΡΡ‚ΡŒ Π”Π·Π΅Π½Π° Python. Ѐилософии, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ язык ΠΈ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ люди ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π° Π½Π΅ учатся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ стороны Python. Π£ Python довольно надСТная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль, Π½ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль Python, Π° Π½Π΅ C++, Java или…кого-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

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

А Python просто сСйчас ΠΎΡ‡Π΅Π½ΡŒ популярСн. Он своСго Ρ€ΠΎΠ΄Π° Ρ„Ρ€ΠΎΠ½Ρ‚ΠΌΠ΅Π½, Π° Ρ‚ΠΎΡ‚ ΠΊΡ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ, Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽΡ‚. И Π΄Π°, я понимаю, Ρ‡Ρ‚ΠΎ Python стрСмится Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ простым, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ‰Π°Π» Π­ΠΉΠ½ΡˆΡ‚Π΅ΠΉΠ½: «всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ простым, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΡ‰Π΅Β». Однако ΠΈΠ½ΠΎΠ³Π΄Π° Python всё ΠΆΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² это Β«ΠΏΡ€ΠΎΡ‰Π΅Β» Ρ‡Π΅ΠΌ Π½Π°Π΄ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Python ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ обновлСния ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ задумывался ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΠΉ язык сцСнариСв (Π° Ρ‚Π°ΠΌ Ρ‡Π΅ΠΌ мСньшС Ρ†Π΅Ρ€Π΅ΠΌΠΎΠ½ΠΈΠΉ, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅).

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

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ прСвращаСтся Π² бСспорядок, β€” это ваша Π²ΠΈΠ½Π°, Π° Π½Π΅ Π²ΠΈΠ½Π° языка. И ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ язык: инструмСнтом, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ваши ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π° Π½Π΅ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΡ€ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚, ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΠ΅Ρ‚ Π²Π°ΠΌΠΈ.

Если ΠΌΡ‹ напишСм язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄ΠΈΠΎΡ‚Ρ‹, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄ΠΈΠΎΡ‚Ρ‹ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. И Π΄Π°, это Ρ†Π΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ придётся Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ.


Π—Π°ΠΊΠΎΠ½Ρ‡Ρƒ ΠΌΡ‹ΡΠ»ΡŒ довольно извСстной Ρ„Ρ€Π°Π·ΠΎΠΉ: Β«Π•ΡΡ‚ΡŒ всСго Π΄Π²Π° Ρ‚ΠΈΠΏΠ° языков программирования: Ρ‚Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ люди всё врСмя Ρ€ΡƒΠ³Π°ΡŽΡ‚ΡΡ, ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Β».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Python

Π’ ΠΊΠΎΠ½Ρ†Π΅ курса Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠΌ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», написав Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Python.

Π’ ООП ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ ΠΎΠ±Ρ‰Π΅ΠΉ слоТности ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

  1. Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ.

  3. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классов, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ случаС нСобходимости установлСниС ΠΌΠ΅ΠΆΠ΄Ρƒ классами наслСдствСнных связСй.

  4. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… для Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

  5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ классов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

  6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

  7. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡƒΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ модСль процСсса обучСния. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ, ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ, кладСзь Π·Π½Π°Π½ΠΈΠΉ.

ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ Ρ‚Ρ€ΠΈ класса – «ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ», «ΡƒΡ‡Π΅Π½ΠΈΠΊ», «Π΄Π°Π½Π½Ρ‹Π΅». Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈ, ΠΎΠ±Π° – люди. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΈΡ… классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ надклассу «Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ». Однако Π² контСкстС Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Ρƒ учитСля ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° вряд Π»ΠΈ найдутся ΠΎΠ±Ρ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ «ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ знания»:

  • Π£Ρ‡Π΅Π½ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Π΅ Π² свои знания.

  • Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡƒΡ‡ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ².

  • Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой список Π·Π½Π°Π½ΠΈΠΉ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ индСксу.

class Data:
    def __init__(self, *info):
        self.
info = list(info) Β  def __getitem__(self, i): return self.info[i] Β  Β  class Teacher: def __init__(self): self.work = 0 Β  def teach(self, info, *pupil): for i in pupil: i.take(info) self.work += 1 Β  Β  class Pupil: def __init__(self): self.knowledge = [] Β  def take(self, info): self.knowledge.append(info) Β 

Π’ класс Teacher Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ свойство экзСмпляров work, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ количСство ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этих классов ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой:

>>> from test import *
>>> lesson = Data('class', 'object', 
... 'inheritance', 'polymorphism', 
... 'encapsulation')
>>> marIvanna = Teacher()
>>> vasy = Pupil()
>>> pety = Pupil()
>>> marIvanna.teach(lesson[2], vasy, pety)
>>> marIvanna.teach(lesson[0], pety)
>>> vasy.knowledge
['inheritance']
>>> pety. knowledge
['inheritance', 'class']

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· учитСля? Если Π΄Π°, ΠΏΡƒΡΡ‚ΡŒ научится Ρ‡Π΅ΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сам.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² класс Pupil ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ случайно «Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ» ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ‡Π°ΡΡ‚ΡŒ своих Π·Π½Π°Π½ΠΈΠΉ.

ΠšΡƒΡ€Ρ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ практичСских Ρ€Π°Π±ΠΎΡ‚:
pdf-вСрсия, android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅


ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python (ООП) β€” PYnative

Π’ этой сСрии Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ООП (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) Π½Π° Python. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, классы, конструктор ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ наслСдованиС.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python

Π­Ρ‚Π° сСрия Python OOP содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ….

  • ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python : Π’Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, создав для создания классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π² Python : ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ конструктор для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Python. ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ конструкторов.
  • ДСструкторы Python для уничтоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° : ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ дСструктор Π² Python для освобоТдСния Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.
  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π² Python : ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса. Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ скрытиС Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм общСдоступных, Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΈ частных Ρ‡Π»Π΅Π½ΠΎΠ²
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Python : Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, пСрСопрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
  • НаслСдованиС Π² Python : ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ наслСдованиС Π² Python. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΡ‹ наслСдования ΠΈ MRO (порядок Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²).
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра Python : ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ экзСмпляра. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра. ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅, ΠΊΠ°ΠΊ динамичСски ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра Python : Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра.
    ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅, ΠΊΠ°ΠΊ динамичСски ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • .
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Python : ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ класса. ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ экзСмпляра ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ класса.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ класса Python : Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @classmethod ΠΈ classmethod() функция
  • БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Python : Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @staticmethod ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ staticmethod()
  • ΠœΠ΅Ρ‚ΠΎΠ΄ класса Python, статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра : ΠΏΠΎΠΉΠΌΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми трСмя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса
  • ООП-ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Python . Π Π΅ΡˆΠΈΡ‚Π΅ это ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) β€” это ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, основанная Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Β« ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Β». ΠžΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ΄: Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ свойств (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ) ΠΈ ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π―Π·Ρ‹ΠΊ программирования Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Одним ΠΈΠ· популярных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ программирования ΠΏΡƒΡ‚Π΅ΠΌ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² 9.0003 ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Python OOP

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ характСристики:

  • Атрибут
  • ПовСдСниС

НапримСр, ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

  • Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ†Π΅Π½Π°, Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
  • ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°, ускорСниС ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

Одним ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… аспСктов ООП Π² Python являСтся созданиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° с использованиСм ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ наслСдования. Π­Ρ‚Π° концСпция Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ DRY (Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠΉΡ‚Π΅ΡΡŒ).

Класс ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π’ Python всС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Класс β€” это ΠΏΠ»Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° . Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° модСль, ΠΏΠ»Π°Π½ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ класс.

НапримСр, Π²Ρ‹ создаСтС Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΏΠΎ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΡƒ (ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ) автомобиля. План содСрТит всС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ структуру. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° этих описаниях, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊ, автобус ΠΈΠ»ΠΈ любоС транспортноС срСдство. Π—Π΄Π΅ΡΡŒ Π»Π΅Π³ΠΊΠΎΠ²ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊ, автобус ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ 9 класса транспортного срСдства.0003

Класс содСрТит свойства (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚) ΠΈ дСйствиС (ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Бвойства ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой дСйствия. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, класс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Класс ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ являСтся экзСмпляром класса . ЀизичСскоС сущСствованиС класса Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, которая ΠΈΠΌΠ΅Π΅Ρ‚ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΌΡ‹ΡˆΡŒ, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ ΠΈ Ρ‚. Π΄.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ : ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python

Атрибуты ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ класса ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса.

Π’ классС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ части:

  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра β€” это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ ΠΊ экзСмпляру класса. ΠœΡ‹ опрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра Π² конструкторС (ΠΌΠ΅Ρ‚ΠΎΠ΄
    __init__()
    класса).
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса: пСрСмСнная класса β€” это пСрСмСнная, объявлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π½ΠΎ Π²Π½Π΅ любого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра ΠΈΠ»ΠΈ __init()__ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

  • ΠœΠ΅Ρ‚ΠΎΠ΄ экзСмпляра : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΈΠ»ΠΈ измСнСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ экзСмпляра.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ класса : Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΈΠ»ΠΈ измСнСния состояния класса.
    Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса.
  • БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ : это ΠΎΠ±Ρ‰ΠΈΠΉ слуТСбный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ. Π’Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра ΠΈΠ»ΠΈ класса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этот статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса.

ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠœΠ΅Ρ‚ΠΎΠ΄ класса Python, статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми трСмя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для опрСдСлСния класса. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкой являСтся docstring, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ собой ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС класса.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ рСкомСндуСтся ΠΊ использованию. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __doc__ . Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис для создания класса .

Бинтаксис

 класс classname:
    '''строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ'''
   class_suite 
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ : прСдставляСт описаниС класса . Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.
  • class_suite : класс Π½Π°Π±ΠΎΡ€ содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ любоС количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса.

 reference_variable = classname() 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ООП: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Python

 class Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ:
    # ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса
    company_name = 'Компания ABC'

    # конструктор для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
    def __init__(я, имя, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
        # ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра
        self.name = имя
        собствСнная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

    # ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра
    Π΄Π΅Ρ„-ΡˆΠΎΡƒ (я):
        print('Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ:', self.name, self.salary, self.company_name)

# создаСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
emp1 = Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ ("Π“Π°Ρ€Ρ€ΠΈ", 12000)
emp1. show()

# создаСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
emp2 = Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ("Π­ΠΌΠΌΠ°", 10000)
emp2.show()
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

 Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ: Harry 12000 ABC Company
Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ: Π­ΠΌΠΌΠ° 10000 ABC Company 
  • Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создали класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ.
  • Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° имя ΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°.
  • Π”Π°Π»Π΅Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init__() ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся сразу послС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ init ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  • НаконСц, ΠΈΠ· класса Employee ΠΌΡ‹ создали Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π­ΠΌΠΌΡƒ ΠΈ Π“Π°Ρ€Ρ€ΠΈ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π² Python

Π’ Python конструктор β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ особого Ρ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ автоматичСски ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если ΠΌΡ‹ создаСм Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, конструктор вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Основная Ρ†Π΅Π»ΡŒ конструктора β€” ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΉ 9.0054 сам . ΠœΠ΅Ρ‚ΠΎΠ΄ __init()__ называСтся конструктором Π² Python. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, имя конструктора Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ __ init __ (self) .

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ :

  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π² Python
  • дСструкторов Python для уничтоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π² Python

Π’ Python инкапсуляция β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ объСдинСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр, класс A инкапсулируСт всС Π΄Π°Π½Π½Ρ‹Π΅ (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅). Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ скрыто ΠΎΡ‚ внСшнСго опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Python

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ инкапсуляции

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ дСйствуСт ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹ΠΉ слой. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ·Π²Π½Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ случайноС ΠΈΠ»ΠΈ нСсанкционированноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, скрывая Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π°.

ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ инкапсуляции Π² Python .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: инкапсуляция Π² Python

Когда Π²Ρ‹ создаСтС класс, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Класс являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ инкапсуляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ связываСт всС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅.

Π’ Python Ρƒ нас Π½Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ public, private ΠΈ protected. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ инкапсуляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСфикс single 9.0008 ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ для управлСния доступом ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Python.

 класс Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ:
    def __init__(я, имя, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
        # ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½
        self.name = имя
        # Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ участник
        # нСдоступно Π²Π½Π΅ класса
        self. __salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

    Π΄Π΅Ρ„-ΡˆΠΎΡƒ (я):
        print("Имя ", self.name, "ΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°", self.__salary)

emp = Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ("ДТСсса", 40000)
emp.show()

# доступ ΠΊ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π΅ Π²Π½Π΅ класса
print(emp.__salary)
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

 Имя ДТСсса ΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° 40000
AttributeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΒ» Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Β«__salaryΒ» 

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Python

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² ООП β€” это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ мноТСство Ρ„ΠΎΡ€ΠΌ . ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ дСйствиС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ происходит ΠΎΡ‚ грСчСских слов Poly (ΠΌΠ½ΠΎΠ³ΠΎ) ΠΈ morphism (Ρ„ΠΎΡ€ΠΌΡ‹). ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ опрСдСляСт ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹.

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Python

ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ Π² Python .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: использованиС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² Python

НапримСр, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра calculate_area() создан ΠΊΠ°ΠΊ Π² классС Circle, Ρ‚Π°ΠΊ ΠΈ Π² классС Rectangle. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±Π΅Ρ€Π΅Ρ‚ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ calculate_area() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. ИспользованиС этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ выполняли ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ дСйствиС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ (ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ дСйствиС), Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ (Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹)

 класс ΠšΡ€ΡƒΠ³:
    ΠΏΠΈ = 3,14

    def __init__(я, рСдиус):
        self. radius = рСдиус

    def calculate_area (я):
        print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π°:", self.pi * self.radius * self.radius)

класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ:
    def __init__(я, Π΄Π»ΠΈΠ½Π°, ΡˆΠΈΡ€ΠΈΠ½Π°):
        собствСнная Π΄Π»ΠΈΠ½Π° = Π΄Π»ΠΈΠ½Π°
        собствСнная ΡˆΠΈΡ€ΠΈΠ½Π° = ΡˆΠΈΡ€ΠΈΠ½Π°

    def calculate_area (я):
        print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:", self.length * self.width)

# функция
ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (Ρ„ΠΎΡ€ΠΌΠ°):
    # дСйствиС Π²Ρ‹Π·ΠΎΠ²Π°
    shape.calculate_area()

# ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
ΠΊΡ€ΡƒΠ³ = ΠΊΡ€ΡƒΠ³ (5)
ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ = ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (10, 5)

# Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ (ΠΎΠΊΡ€)
ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ (прямая)
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

 ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° : 78,5
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°: 50 

НаслСдованиС в Python

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС программирования Π²Π°ΠΆΠ½Ρ‹ΠΌ аспСктом являСтся наслСдованиС. Π’ Python наслСдованиС β€” это процСсс наслСдования свойств Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ классу.

Основной Ρ†Π΅Π»ΡŒΡŽ наслСдования являСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ наслСдованиС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ класса вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с нуля.

Бинтаксис

 класс Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс:
  ВСло базового класса
класс DerivedClass (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс):
  Π’Π΅Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса 

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ НаслСдованиС Π² Python

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: использованиС наслСдования Π² Python

Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Из класса транспортного срСдства ΠΌΡ‹ создаСм класс Car. Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ снова ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² классС Car. Нам Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спСцифичны для Car.

ΠŸΡ€ΠΈ наслСдовании Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, свойства ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ любой ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

 # Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
класс ВранспортноС срСдство:

    def __init__(я, имя, Ρ†Π²Π΅Ρ‚, Ρ†Π΅Π½Π°):
        self.name = имя
        self.color = Ρ†Π²Π΅Ρ‚
        собствСнная Ρ†Π΅Π½Π° = Ρ†Π΅Π½Π°

    информация ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ (я):
        print(self.name, self.color, self. price)

# Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
Класс ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ(ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ):

    def change_gear (я, Π½Π΅Ρ‚):
        print(self.name, 'ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π½Π° Π½ΠΎΠΌΠ΅Ρ€', Π½Π΅Ρ‚)

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Car
car = Car('BMW X1', 'Π§Π΅Ρ€Π½Ρ‹ΠΉ', 35000)
Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ.информация()
car.change_gear(5)
 

Π’Ρ‹Ρ…ΠΎΠ΄ :

 BMW X1 Π§Π΅Ρ€Π½Ρ‹ΠΉ 35000
BMW X1 ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ 5 

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

  • Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Python OOP

ВсС ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ Python ΠΏΠΎ ООП:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Python ΠžΡΠ½ΠΎΠ²Ρ‹ ООП

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

Класс

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса β€” это Π³Ρ€ΡƒΠΏΠΏΠ° элСмСнтов. Π­Ρ‚ΠΎ логичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с нСсколькими ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ класс для ΠΈΠ³Ρ€Ρ‹ Π² ΠΊΡ€ΠΈΠΊΠ΅Ρ‚, Ρƒ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ ΠΈΠ³Ρ€ΠΎΠΊΠΈ, Ρ‚ΡƒΡ€Π½ΠΈΡ€Ρ‹, ΠΆΠ΅Ρ€Π΅Π±ΡŒΠ΅Π²ΠΊΠ°, ΠΏΡ€ΠΎΠ±Π΅ΠΆΠΊΠΈ, ΠΊΠ°Π»ΠΈΡ‚ΠΊΠΈ, ΠΌΠ°Ρ‚Ρ‡ΠΈ ΠΈ Ρ‚.Β Π΄. ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° поля: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ. Π’ классС Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция display (), которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΡ€ΠΈΠΊΠ΅Ρ‚Π΅ β€”

 

класс ΠšΡ€ΠΈΠΊΠ΅Ρ‚: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = 10 player = "Π‘Π°Ρ‡ΠΈΠ½ Π’Π΅Π½Π΄ΡƒΠ»ΠΊΠ°Ρ€" дисплСй Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я): ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (self.id, self.player) print('Класс создан ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ')

Π’Ρ‹Π²ΠΎΠ΄

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π°

 Класс создан ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ
 

ΠžΠ±ΡŠΠ΅ΠΊΡ‚

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ являСтся экзСмпляром класса. Π­Ρ‚ΠΎ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ с состояниСм ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΎΡ‰Π΅ говоря, это экзСмпляр класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΌΡ‹ΡˆΡŒ, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, стул, стол, Ρ€ΡƒΡ‡ΠΊΠ° ΠΈ Ρ‚. Π΄.

Python рассматриваСт всС ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ВстроСнный Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __doc__ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² исходном ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€”

 

class Cricket: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = 10 player = "Π‘Π°Ρ‡ΠΈΠ½ Π’Π΅Π½Π΄ΡƒΠ»ΠΊΠ°Ρ€" дисплСй Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я): print("ID: %d \nPlayer: %s"%(self.id,self.player)) # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр crkt класса Cricket crct = свСрчок () crct.display()

Π’Ρ‹Π²ΠΎΠ΄

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

 ID: 10
Π˜Π³Ρ€ΠΎΠΊ: Π‘Π°Ρ‡ΠΈΠ½ Π’Π΅Π½Π΄ΡƒΠ»ΠΊΠ°Ρ€
 

ΠœΠ΅Ρ‚ΠΎΠ΄

Ѐункция, связанная с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. ΠœΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ относится ΠΊ экзСмплярам класса Π² Python. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: plant() ΠΈ animals(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Β«ΠŸΠ΅Ρ€ΠΎΒ» являСтся экзСмпляром ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ΠΈ извСстны ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра.

 

класс ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: # Атрибуты экзСмпляра def __init__(я, имя, возраст): self.name = имя возраст = возраст # ΠœΠ΅Ρ‚ΠΎΠ΄ экзСмпляра Π—Π°Π²ΠΎΠ΄ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ (я, эвкалипт): Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "{} растСния {}".format(self.name, эвкалипт) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… (я): Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "{} ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…".format(self.name) # созданиС экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠŸΠ΅Ρ€ΠΎ = ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ("ΠŸΠ΅Ρ€ΠΎ", 10) # Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² экзСмпляра print(Pen.plant("'ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅'")) print(Pen.animals())

Π’Ρ‹Π²ΠΎΠ΄

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° β€”

 Π—Π°Π³ΠΎΠ½Π½Ρ‹Π΅ растСния Β«ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β»
Π—Π°Π³ΠΎΠ½Π½Ρ‹Π΅ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅
 

НаслСдованиС

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ наслСдования Π² Python

 

# Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс класс Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅: Π·Π°Ρ‰ΠΈΡ‚Π° __init__(сам): print("Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ Ρ‚Π°ΠΌ") ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ WhatIstheClass (я): ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ("Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅") Def Run (я): print("Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° скорости") # Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс класс Π›Π΅Π²(Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅): Π·Π°Ρ‰ΠΈΡ‚Π° __init__(сам): # Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ super() супСр(). __ΠΈΠ½ΠΈΡ‚__() print("Π›Π΅Π² Ρ‚Π°ΠΌ") ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ WhatIstheClass (я): ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("Π›Π΅Π²") Π΄Π΅Ρ„ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ): print("Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° скорости") синий = Π›Π΅Π² () blu.WhatIstheClass() синий.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ() blu.run()

Output

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ установили Π΄Π²Π° класса: Animal (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс) ΠΈ Lion (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом. Π­Ρ‚ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Run().

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом. ΠœΠ΅Ρ‚ΠΎΠ΄ WhatIstheClass() ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ это. Добавляя Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ run(), ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init__() ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ super(). Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__() Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса.

 Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ здСсь
Π›Π΅Π² Ρ‚Π°ΠΌ
Π›Π΅Π²
Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° скорости
Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° скорости
 

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ инкапсуляции Π΄Π°Π½Π½Ρ‹Ρ… Π² Python β€”

 

class Sports: Π·Π°Ρ‰ΠΈΡ‚Π° __init__(сам): self.__sportsName = "ΠšΡ€ΠΈΠΊΠ΅Ρ‚" Π΄Π΅Ρ„ ΠΈΠ³Ρ€Π°(я): print("Π˜Π³Ρ€Π°: {}".format(self.__sportsName)) def Player_Name(я, ΠΈΠ³Ρ€ΠΎΠΊ): self.__sportsName = ΠΈΠ³Ρ€ΠΎΠΊ с = Π‘ΠΏΠΎΡ€Ρ‚() с.ΠΈΠ³Ρ€Π°() # ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ спортивного названия s.__sportsName = 'Π₯ΠΎΠΊΠΊΠ΅ΠΉ' с.ΠΈΠ³Ρ€Π°() # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ установки s.Player_Name('Π₯ΠΎΠΊΠΊΠ΅ΠΉ') с.ΠΈΠ³Ρ€Π°()

Π’Ρ‹Π²ΠΎΠ΄

Π‘ΠΏΠΎΡ€Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ класс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅. НазваниС ΠΈΠ³Ρ€Ρ‹ Sports сохраняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__(). ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅

 s.__sportsName = 'Π₯ΠΎΠΊΠΊΠ΅ΠΉ'
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ __sportsName Π²Π½Π΅ класса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ __sportsName являСтся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ эту ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-установщик Player Name(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° sportsName, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

 Π˜Π³Ρ€Π°: ΠšΡ€ΠΈΠΊΠ΅Ρ‚
Π˜Π³Ρ€Π°: ΠšΡ€ΠΈΠΊΠ΅Ρ‚
Π˜Π³Ρ€Π°: Π₯ΠΎΠΊΠΊΠ΅ΠΉ
 

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

«Поли» ΠΈ Β«ΠΌΠΎΡ€Ρ„Ρ‹Β» β€” Π΄Π²Π° слова, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π‘Π»ΠΎΠ²Π° Β«ΠΏΠΎΠ»ΠΈΒ» ΠΈ Β«ΠΌΠΎΡ€Ρ„Β» ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ «мноТСство» ΠΈ Β«Ρ„ΠΎΡ€ΠΌΠ°Β» соотвСтствСнно. Под ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ дСйствиС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами.

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°ΡΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ; Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹ (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΏΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΊΡ€ΡƒΠ³). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π°ΡΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚Π° концСпция извСстна ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² Python

класса Lion: Π—Π°Ρ‰ΠΈΡ‚Π° Π Π΅Π²(я): print("Π›Π΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Ρ‹Ρ‡Π°Ρ‚ΡŒ") Π—Π°Ρ‰ΠΈΡ‚Π° Π‘Π°Ρ€ΠΊΠ° (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ): print("Π›Π΅Π² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π°ΡΡ‚ΡŒ") класс Π‘ΠΎΠ±Π°ΠΊΠ°: Π—Π°Ρ‰ΠΈΡ‚Π° Π Π΅Π²(я): print("Π‘ΠΎΠ±Π°ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Ρ‹Ρ‡Π°Ρ‚ΡŒ") Π—Π°Ρ‰ΠΈΡ‚Π° Π‘Π°Ρ€ΠΊΠ° (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ): print("Π‘ΠΎΠ±Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π°ΡΡ‚ΡŒ") # ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ качСства ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ sound_test (ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰Π΅Π΅): ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰Π΅Π΅.