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

Π˜Ρ‚ΠΎΠ³ΠΈ курса «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python»

ΠžΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π΅Π³ΠΎ особСнностях Π±Ρ‹Π»ΠΈ рассмотрСны Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅. Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² этом курсС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π».

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

Π’ курсС Π½Π΅ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ мноТСствСнному наслСдованию, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс наслСдуСтся ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ…. Π’Π°ΠΊΠΎΠ΅ наслСдованиС поддСрТиваСтся Π² Python Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ классов. ΠŸΡ€ΠΈ мноТСствСнном наслСдовании слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ особСнности поиска Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… классов ΠΈΠΌΠ΅Ρ‚ΡŒ схоТиС интСрфСйсы. Он рСализуСтся ΠΏΡƒΡ‚Π΅ΠΌ объявлСния Π² Π½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. К ΠΏΡ€ΠΎΡΠ²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΊΠ°ΠΊ особСнности ООП Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ наслСдования, инкапсуляции ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ особСнности ООП. Π’Π°ΠΊΠΎΠ²ΠΎΠΉ являСтся композиция, ΠΈΠ»ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° класс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ класса-Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ составными частями ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

ΠšΠ»Π°ΡΡΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько классов. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Благодаря ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ Π² Python ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‚ΡΡ пространства ΠΈΠΌΠ΅Π½.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ООП

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π½Π°Π΄Π΅Π»ΡΡŽΡ‚ Π΅Π³ΠΎ рядом прСимущСств.

Π’Π°ΠΊ ООП позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. На основС классов создаСтся мноТСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ собствСнныС значСния ΠΏΠΎΠ»Π΅ΠΉ. НСт нСобходимости Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ мноТСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚. ΠΊ. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² своС распоряТСниС ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½. Π’ этом смыслС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° структуры Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π΅ΠΊΡƒΡŽ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ присоСдинСны инструмСнты для ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ – ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

НаслСдованиС позволяСт Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° счСт добавлСния ΠΈ пСрСопрСдСлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

НСдостатки ООП

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

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

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ООП Π² Python

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками Π² Python ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ программирования ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ рядом особых Ρ‡Π΅Ρ€Ρ‚.

Всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ – число, строка, список, функция, экзСмпляр класса, сам класс, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’Π°ΠΊ класс – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, способный ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ – экзСмпляры.

Π’ Python Π½Π΅Ρ‚ просто Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ВсС Ρ‚ΠΈΠΏΡ‹ – это классы.

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

И напослСдок

Python – это всС-Ρ‚Π°ΠΊΠΈ скриптовый ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. Π₯отя Π½Π° Π½Π΅ΠΌ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ числС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, часто ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, систСмном администрировании для создания Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-сцСнариСв. Π’ этом случаС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно встроСнных срСдств языка, «ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ» собствСнныС классы излишнС.

Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Python всё – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ всё ΠΏΡ€ΠΎΠ½ΠΈΠ·Π°Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ООП ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности языка ΠΊΠ°ΠΊ инструмСнта Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

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


ООП Π² Python β€” ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, классы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

upd:

АлСксандр Π—Π°ΠΉΠΊΠΎΠ²

20.6K

2

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ

ООП β€” самая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ особый способ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°. Π•Ρ‘ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. И это нСспроста. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ содСрТимоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ СстСствСнным для нашСго ΠΌΠΈΡ€Π° способом.

Π“Π»Π°Π²Π½Ρ‹ΠΌ понятиСм ООП являСтся понятиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сущностСй Π½Π° ΠΏΠ»Π°Π½Π΅Ρ‚Π΅ ЗСмля β€” это Π½Π΅ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

И с Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ взаимодСйствуСм ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ программирования. Банковский счёт, пСрсонаТ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ ΠΈΠ»ΠΈ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ сайта β€” всё это Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² со схоТими свойствами Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² классы. ИдСя класса Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ООП. Π‘ΠΎ стороны ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, класс β€” это всСго лишь Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ для программиста это ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ глубокая абстрактная структура. Но ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΡƒΠΆΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠΊΠ΅.

πŸ’β€β™‚οΈ Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ³Ρ€. Наша студия трудится Π½Π°Π΄ Π½ΠΎΠ²Ρ‹ΠΌ автосимулятором. Π’ ΠΈΠ³Ρ€Π΅ Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны Ρ€Π°Π·Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ транспорта: Π»Π΅Π³ΠΊΠΎΠ²Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π³ΠΎΠ½ΠΎΡ‡Π½Ρ‹Π΅, Π³Ρ€ΡƒΠ·ΠΎΠ²Ρ‹Π΅ ΠΈ пассаТирскиС. ВсС ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ словом β€” автотранспорт. Π‘Π΄Π΅Π»Π°Π² это, ΠΌΡ‹ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ класс. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ этого класса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π‘ΡŒΡŽΠΈΠΊ 1968-Π³ΠΎ Π³ΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΈ Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Freightliner Columbia ΠΆΠ΅Π»Ρ‚ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°.

Π£ класса Π΅ΡΡ‚ΡŒ свойства ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² ООП ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ).

  • Бвойства β€” это характСристики, присущиС Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ мноТСству ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” Ρ‚Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ.

Бвойствами класса «Π°Π²Ρ‚ΠΎΡ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚» ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π³ΠΎΠ΄ выпуска, Π²ΠΈΠ΄ ΠΈ Ρ†Π²Π΅Ρ‚. На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: Π‘ΡŒΡŽΠΈΠΊ Π­Π»Π΅ΠΊΡ‚Ρ€Π° β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса «ΠΠ²Ρ‚ΠΎΡ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚» со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами:

  • Π²ΠΈΠ΄ β€” Π»Π΅Π³ΠΊΠΎΠ²ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ;
  • Ρ†Π²Π΅Ρ‚ β€” Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ;
  • Π³ΠΎΠ΄ выпуска β€” 1968.

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ экзСмпляр класса

Помимо физичСских Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ внСшний Π²ΠΈΠ΄ ΠΈ характСристики транспортного срСдства, Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сходствами. НапримСр, всС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ…Π°Ρ‚ΡŒ, Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ скорости, ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈΡ‚ΡŒ. Π’ нашСм случаС, всё это β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса «ΠΠ²Ρ‚ΠΎΡ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚». Π’ΠΎ Π΅ΡΡ‚ΡŒ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ.

ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ, поэтому прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² Π½Π΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ исправными. Π—Π½Π°Ρ‡ΠΈΡ‚, Π²ΠΏΠΎΠ»Π½Π΅ СстСствСнно, Ρ‡Ρ‚ΠΎ каТдая ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Ρ…Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ.

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ класс «ΠΠ²Ρ‚отранспорт» ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

# класс автотранспорт class MotorTransport(object): def __init__(self, color, year, auto_type): self.color = color self.year = year self.auto_type = auto_type # Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ def stop(self): print("Pressing the brake pedal") # Π΅Ρ…Π°Ρ‚ΡŒ def drive(self): print('WRRRRRUM!')

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΡ€Π°ΡΠ½ΡƒΡŽ Ρ„Π΅Ρ€Ρ€Π°Ρ€ΠΈ. ΠŸΡƒΡΡ‚ΡŒ ΠΈ Π² симуляторС.

# создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Автотранспорт ferrari_testarossa = MotorTransport('Red', 1987, 'passenger car') # ΠΆΠΌΡ‘ΠΌ Π½Π° Π³Π°Π· ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄! ferrari_testarossa.drive() > WRRRRRUM!

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП

Абстракция

Абстракция β€” это Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ основных, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… характСристик ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ второстСпСнных.

Π›ΡŽΠ±ΠΎΠΉ составной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° β€” это абстракция. Говоря «Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ», Π²Π°ΠΌ Π½Π΅ трСбуСтся Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… пояснСний, Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ пластика, ΠΌΠ΅Ρ‚Π°Π»Π»Π°, ТидкокристалличСского дисплСя ΠΈ микросхСм. Абстракция позволяСт ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ, поэтому для нашСго сознания это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… способов ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ со ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. Если Π±, подходя ΠΊ Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΡƒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Ρ‚Π°Π»Π»ΠΎΠΌ корпуса, пластиковыми Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, лакокрасочным слоСм ΠΈ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠΌ, Π²Ρ‹ вряд Π»ΠΈ смогли Π±Ρ‹ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΌΠΎΡ€ΠΎΠ·ΠΈΠ»ΠΊΠΈ Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ΠΊΠ»ΡƒΠ±Π½ΠΈΠΊΡƒ.

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Ρƒ вас Π΅ΡΡ‚ΡŒ класс «ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ», Π° Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ «ΠΡ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ». Для Π²ΠΎΠΈΠ½Π° это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Ρ€ ΠΌΠ΅Ρ‡ΠΎΠΌ, для Ρ€Π΅ΠΉΠ½Π΄ΠΆΠ΅Ρ€Π° β€” выстрСл ΠΈΠ· Π»ΡƒΠΊΠ°, Π° для волшСбника β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ заклинания «ΠžΠ³Π½Π΅Π½Π½Ρ‹ΠΉ Π¨Π°Ρ€». Π’ сущности, всС эти Ρ‚Ρ€ΠΈ дСйствия β€” Π°Ρ‚Π°ΠΊΠ°, Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ.

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

Π­Ρ‚ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ понятиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° Π² ООП. ВСрнёмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ автосимулятору. На ΡƒΡ€ΠΎΠ²Π½Π΅ абстракции «ΠΠ²Ρ‚ΠΎΡ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚» ΠΌΡ‹ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ особСнности ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° транспортного срСдства, Π° рассматриваСм ΠΈΡ… «Π² Ρ†Π΅Π»ΠΎΠΌ». Если ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈΠ³Π»ΡΠ΄Π΅Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊΠ°ΠΌ, Ρ‚ΠΎ окаТСтся, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ свойства ΠΈ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½ΠΈ Ρƒ Π»Π΅Π³ΠΊΠΎΠ²Ρ‹Ρ…, Π½ΠΈ Ρƒ пассаТирских машин. Но, ΠΏΡ€ΠΈ этом, ΠΎΠ½ΠΈ всё Π΅Ρ‰Ρ‘ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ всСми Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ характСристиками, присущими автотранспорту.

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс «Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником «ΠΠ²Ρ‚ΠΎΡ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚Π°». ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ всС ΠΏΡ€ΠΎΡˆΠ»Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Ρ†Π²Π΅Ρ‚, Π³ΠΎΠ΄ выпуска), Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅. Для Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊΠΎΠ² это ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π³Ρ€ΡƒΠ·ΠΎΠΏΠΎΠ΄ΡŠΡ‘ΠΌΠ½ΠΎΡΡ‚ΡŒ, снаряТСнная масса ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΆΠΈΠ»ΠΎΠ³ΠΎ отсСка Π² ΠΊΠ°Π±ΠΈΠ½Π΅. А ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΈΠΊΠΎΠ², ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ функция сцСплСния ΠΈ отцСплСния ΠΏΡ€ΠΈΡ†Π΅ΠΏΠ°.

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ β€” это Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для бСзопасности ΠΈ управлСния ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π°. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ дСталям слоТной ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Абстракция ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π° инкапсуляция Π½Π΅ позволяСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ для ΠΌΡƒΠ½ΠΈΡ†ΠΈΠΏΠ°Π»ΡŒΠ½Ρ‹Ρ… слуТб класс «ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Π°». Π£ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ свойства Π²Ρ€ΠΎΠ΄Π΅ адрСса, ΠΌΠ΅Ρ‚Ρ€Π°ΠΆΠ° ΠΈ высоты ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠΎΠ². И ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этих свойств ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ постановку Π½Π° ΡƒΡ‡Ρ‘Ρ‚ Π² РосрССстрС. Π­Ρ‚ΠΎ готовая концСпция, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠ³ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ «ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒ» ΠΈ «ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ мСсто хранСния Π΄Π΅Π½Π΅Π³». Π­Ρ‚ΠΎ А) НСбСзопасно ΠΈ Π‘) Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°ΠΌ РосрССстра Π½Π΅ трСбуСтся Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Π°ΠΌ Π΄ΠΎΠΌΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ высоту ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠΎΠ² β€” ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сами ΠΈΠΌ прСдоставили.

Класс

— Π£ тСбя Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡? — Π›ΡƒΡ‡ΡˆΠ΅! Π£ мСня Π΅ΡΡ‚ΡŒ рисунок ΠΊΠ»ΡŽΡ‡Π°!

ΠšΠ»Π°ΡΡΡ‹, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°ΠΌ: это Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ сами ΠΏΠΎ сСбС, Π° ΠΈΡ… схСмы. Класс «Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ… счСтов» ΠΈΠΌΠ΅Π΅Ρ‚ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ для всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π½Ρ‘ΠΌ β€” сами счСта β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹.

Как Π² Python ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс

Π’ Python классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ смыслу Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков. ΠΡŽΠ°Π½ΡΡ‹ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Для создания класса Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ class, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ имя. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС, класс выглядит Ρ‚Π°ΠΊ:

class SimpleClass: pass

Для имСнования классов Π² Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΡ‚ΠΈΠ»ΡŒ «camel case», Π³Π΄Π΅ пСрвая Π±ΡƒΠΊΠ²Π° β€” заглавная.

LikeThis

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² ООП зовётся конструктором. Он Π½ΡƒΠΆΠ΅Π½ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, пустыС экзСмпляры класса «Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚» бСссмыслСнны, ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π²Ρ€ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ, Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π’ качСствС ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠ²ΡΠΊΠΎΠ³ΠΎ конструктора выступаСт ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__():

class Student: def __init__(self, name, surname, group): self.name = name self.surname = surname self.group = group alex = Student("Alex", "Ivanov", "admin")

Атрибуты класса

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

Поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ статичСскими ΠΈ динамичСскими:

  • БтатичСскиС поля (поля класса) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. А Π·Π½Π°Ρ‡ΠΈΡ‚, конструктор Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.
  • ДинамичСскиС поля (поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора, ΠΈ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, экзСмпляр Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Π° полям ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния.
class MightiestWeapon: # статичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name = "Default name" def __init__(self, weapon_type): # динамичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ self.weapon_type = weapon_type

☝️ ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β€” статичСский ΠΈ динамичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя:

class MightiestWeapon: # статичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name = "Default name" def __init__(self, name): # динамичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ self.name = name weapon = MightiestWeapon("sword") print(MightiestWeapon.name) print(weapon.name)

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса

ΠœΠ΅Ρ‚ΠΎΠ΄ β€” это функция класса.

НапримСр, Ρƒ всСх Π½Π°ΡƒΡ‡Π½ΠΎ-фантастичСских космичСских ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ Π΅ΡΡ‚ΡŒ Π±ΠΎΡ€Ρ‚ΠΎΠ²ΠΎΠ΅ ΠΎΡ€ΡƒΠΆΠΈΠ΅. И ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ.

class SpaceShip: def atack(self): print('ΠŸΠΈΡƒ!') star_destroyer = SpaceShip() star_destroyer.atack() > ΠŸΠΈΡƒ!

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ self?

Аналог этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках β€” слово this. self β€” это всСго лишь ссылка Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр класса.

🐈 ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с котофСями:

  1. ВсС ΠΊΠΎΡ‚ΠΈΠΊΠΈ ΡƒΠΌΠ΅ΡŽΡ‚ ΠΌΡƒΡ€Π»Ρ‹ΠΊΠ°Ρ‚ΡŒ;
  2. Π­Ρ‚Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² классС ΠšΠΎΡ‚, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠœΡƒΡ€Ρ‡Π°Ρ‚ΡŒ;
  3. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΡ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠŸΡƒΡˆΠΎΠΊ ΠΏΠΎΠΌΡƒΡ€Ρ‡Π°Π»;
  4. Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: ΠšΠΎΡ‚.ΠœΡƒΡ€Ρ‡Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΌΡƒΡ€Π»Ρ‹ΠΊΠ°Ρ‚ΡŒ Π½Π°Ρ‡Π½ΡƒΡ‚ всС ΠΊΠΎΡ‚Ρ‹ Π²ΠΎ ВсСлСнной;
  5. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ‚, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½Π°Ρ‡Π΅: self.ΠœΡƒΡ€Ρ‡Π°Ρ‚ΡŒ;
  6. Π‘Π΄Π΅Π»Π°Π½ΠΎ. ΠŸΡƒΡˆΠΎΠΊ ΠΌΡƒΡ€Π»Ρ‹ΠΊΠ°Π΅Ρ‚.

Π£Ρ€ΠΎΠ²Π½ΠΈ доступа Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅ сущСствуСт ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа ΠΊ полям класса. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² связки public/private/protected ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ со стороны ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инкапсуляции.

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

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ β€” это функция-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°. Π’ Π½Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ, Ρ‚Π΅ΠΌ самым, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ мСняя ΠΊΠΎΠ΄.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ экзСмпляры класса

Π§Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ классов

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ экзСмпляр класса. ВсС ΠΌΡ‹ относимся ΠΊ классу людСй, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· нас β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого класса.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Π² Python

Если Ρƒ нас Π΅ΡΡ‚ΡŒ рСализация класса, Ρ‚ΠΎ Π΅Π³ΠΎ экзСмпляр ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ просто:

class AirConditioner: def __init__(self, model, capacity): self.model = model self.capacity = capacity def turn_on(self): print('Now in the room will be cool') # создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ΠšΠΎΠ½Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Ρ€ ballu = AirConditioner('BPAC-07', 785) ballu.turn_on() > Now in the room will be cool

Атрибуты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Атрибуты класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ динамичСскими ΠΈ статичСскими. На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ½ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ:

class MightiestWeapon: name = "Default name" def __init__(self, weapon_type): self. weapon_type = weapon_type # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Π½Π΅ создавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° MightiestWeapon.name = 'Steel Sword' print(MightiestWeapon.name) > Steal Sword # создаём ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ сразу ΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ динамичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора hero_sword = MightiestWeapon('sword') # ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΡƒΠΆΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ имя hero_sword.name = 'Excalibur' # Π½ΠΎΠ²ΠΎΠ΅ статичСскоС имя ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для всСго класса Π½Π΅ измСнится print(MightiestWeapon.name) > Steal Sword print(hero_sword.name) > Excalibur

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

НСрСдко Π² процСссС написания ΠΊΠΎΠ΄Π° выясняСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сходств ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ называСтся «Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ».

# класс "Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅". Π­Ρ‚ΠΎ достаточно абстрактный класс всСго с ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ "Π˜Π·Π΄Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ". class Animal: def make_a_sound(self): print("Π˜Π·Π΄Π°Ρ‘Ρ‚ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΉ Π·Π²ΡƒΠΊ")

ΠœΡ‹ всС прСкрасно Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ‚ΠΈΠΊΠΈ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π»ΡŽΠ±ΡΡ‚ всё Ρ€ΠΎΠ½ΡΡ‚ΡŒ, Π° собакСны β€” Ρ€Ρ‹Ρ‚ΡŒ зСмлю. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… класса-наслСдника:

# Ρ„Π°ΠΊΡ‚ наслСдования Π² Python указываСтся ΠΏΡ€ΠΈ объявлСнии класса-наслСдника. # Π² скобках, послС ΠΈΠΌΠ΅Π½ΠΈ класса, указываСтся класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ class Cat(Animal): def drop_everything(self): print('Вставай скорСС, я всё ΡƒΡ€ΠΎΠ½ΠΈΠ»!') class Dog(Animal): def dig_the_ground(self): print('ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ я докопаюсь Π΄ΠΎ ядра ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹!')

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этих Π΄Π²ΡƒΡ… классов ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ, Π½ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ собствСнныС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ дСйствия:

Tom = Cat() Tom.make_a_sound() > Π˜Π·Π΄Π°Ρ‘Ρ‚ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΉ Π·Π²ΡƒΠΊ Tom.drop_everything() > Вставай скорСС, я всё ΡƒΡ€ΠΎΠ½ΠΈΠ»!

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

БСйчас Ρƒ нас ΠΈ кошка, ΠΈ собака просто «ΠΈΠ·Π΄Π°ΡŽΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ», Π° Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΈ, свойствСнныС ΠΈΠΌΠ΅Π½Π½ΠΎ этим ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΌ. Для этого сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ° пСрСопрСдСлСния. Достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π² классС-наслСдникС ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС:

class Dog(Animal): def dig_the_ground(self): print('ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ я докопаюсь Π΄ΠΎ ядра ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹!') # ΠΎΡ‚Π½Ρ‹Π½Π΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса "Π‘ΠΎΠ±Π°ΠΊΠ°" Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ эта рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° def make_a_sound(self): print('Π“Π°Π²-Π³Π°Π²!') Balto = Dog() Balto. make_a_sound() > Π“Π°Π²-Π³Π°Π²!

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классов

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠšΠ»Π°ΡΡΡ‹ β€” Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²Ρ‹ ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π΅ для сСбя, ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ написанноС Π²Π°ΠΌΠΈ придётся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ людям. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ восприятиС ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Ρ‹, Ρ‚Π΅ΠΌ самым экономя врСмя ΠΈ дСньги.


ООП Π΅Ρ‰Ρ‘ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ программирования. Но ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅. ΠŸΡ€ΡΠΌΠ°Ρ связь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΈΡ€ΠΎΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ устройство ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠ°ΠΊ самого языка, Ρ‚Π°ΠΊ ΠΈ написания ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

Python OOP Basics β€” Python Cheatsheet

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

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

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰Π°Ρ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ нСсанкционированного доступа ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ способ достиТСния абстракции Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° скрыты ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π°, ΠΈ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ваТная информация.

Π’ Python инкапсуляция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнута с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа β€” это ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² классС. Π’ Python доступны Ρ‚Ρ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа: public, private ΠΈ protected. Однако Π² Python Π½Π΅Ρ‚ явного способа опрСдСлСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа, ΠΊΠ°ΠΊ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java ΠΈ C++. ВмСсто этого ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соглашСниС ΠΎΠ± использовании прСфиксов подчСркивания для обозначСния уровня доступа.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° класс MyClass ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: _protected_var ΠΈ __private_var. _protected_var ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прСфикса подчСркивания. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈ Π΅Π³ΠΎ подклассов, Π½ΠΎ Π½Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ класса. __private_var ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ частный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… прСфиксов подчСркивания. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π° Π½Π΅ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π² Π΅Π³ΠΎ подклассах.

Когда ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MyClass, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ _protected_var, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΎΠ΄Π½ΠΈΠΌ прСфиксом подчСркивания. Однако ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ __private_var ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ скрыт ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π°. Если ΠΌΡ‹ попытаСмся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ __private_var, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ AttributeError, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, инкапсуляция β€” ваТная концСпция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰Π°Ρ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ Python ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ инкапсуляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСфиксы подчСркивания для указания уровня доступа.

 # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass
класс MyClass:
    # ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса
    Π·Π°Ρ‰ΠΈΡ‚Π° __init__(сам):
        # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 10
        # Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с символа подчСркивания, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ доступ
        self. _protected_var = 10
        # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 20
        # Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся с Π΄Π²ΡƒΡ… символов подчСркивания, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ доступ
        self.__private_var = 20
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MyClass
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ = МойКласс()
# Доступ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π΅Π΅ значСния
# ЗащищСнная пСрСмСнная доступна Π²Π½Π΅ класса, Π½ΠΎ
# ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈΠ»ΠΈ Π΅Π³ΠΎ подклассов
print(obj._protected_var) # Π²Ρ‹Π²ΠΎΠ΄: 10
# ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ вывСсти Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
# Доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½Π΅ класса Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π΄Π°ΠΆΠ΅ для Π΅Π³ΠΎ подклассов
# Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ AttributeError, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная нСдоступна Π²Π½Π΅ класса
print(obj.__private_var) # AttributeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 'MyClass' Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° '__private_var'
 

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

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

Π’ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ опрСдСляСм класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Animal, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ конструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΈΠΌΠ΅Π½Π΅ΠΌ speak. ΠœΠ΅Ρ‚ΠΎΠ΄ speak ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классС Animal, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π»Π°.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Π΄Π²Π° подкласса с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Dog ΠΈ Cat, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ класса Animal. Π­Ρ‚ΠΈ подклассы ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Animal.

ΠœΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Dog с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ Β«RoverΒ» ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Cat с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ Β«WhiskersΒ». ΠœΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dog с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dog.speak(), ΠΈ ΠΎΠ½ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Β«Π“Π°Π²!Β» ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ класса Dog пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ класса Animal. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Cat, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ cat.speak(), ΠΈ ΠΎΠ½ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Β«ΠœΡΡƒ!Β» ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ класса Cat пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ класса Animal.

 # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Animal
класс Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅:
    # ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ
    def __init__(я, имя):
        self.name = имя
    # ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС Animal, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π»Π°
    # Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² подклассах Animal
    Def Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ (сам):
        Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ("")
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ подкласс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Dog, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ класса Animal
класс Π‘ΠΎΠ±Π°ΠΊΠ°(Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅):
    # ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Animal
    Def Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("Π“Π°Π²!")
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ подкласс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Cat, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ класса Animal
класс Кошка(Π–ΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅):
    # ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Animal
    Def Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("ΠœΡΡƒ!")
# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Dog с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ "Rover"
собака = Π‘ΠΎΠ±Π°ΠΊΠ° ("Π ΠΎΠ²Π΅Ρ€")
# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Cat с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ "Whiskers"
кошка = кошка ("Усы")
# Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Dog ΠΈ распСчатайтС Π²Ρ‹Π²ΠΎΠ΄
# ΠœΠ΅Ρ‚ΠΎΠ΄ speak класса Dog пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Animal
# Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dog, ΠΎΠ½ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Β«Π“Π°Π²!Β»
dog. speak() # Π²Ρ‹Π²ΠΎΠ΄: Π“Π°Π²!
# Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Cat ΠΈ распСчатайтС Π²Ρ‹Π²ΠΎΠ΄
# ΠœΠ΅Ρ‚ΠΎΠ΄ speak класса Cat пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ speak класса Animal
# Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ speak ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Cat, ΠΎΠ½ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Β«ΠœΡΡƒ!Β»
cat.speak() # Π²Ρ‹Π²ΠΎΠ΄: ΠœΡΡƒ!
 

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

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

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

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это ΠΊΠΎΠ³Π΄Π° нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ имя, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Python Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π½ΠΎ этого ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ написаниС Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½Π΅ зная ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

 #Класс Shape ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° абстрактной области, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для пСрСопрСдСлСния подклассами.
Π€ΠΎΡ€ΠΌΠ° класса:
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я):
        ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°):
    # Класс Rectangle ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚
    # ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ высоты.
    # Он Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚
    # ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° с использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ высоты.
    def __init__(я, ΡˆΠΈΡ€ΠΈΠ½Π°, высота):
        self.width = ΡˆΠΈΡ€ΠΈΠ½Π° # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра ΡˆΠΈΡ€ΠΈΠ½Ρ‹
        self.height = height # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра высоты
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я):
        return self.width * self.height # Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°
 # Класс Circle ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__
 # ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра радиуса. 2
# Бписок Ρ„ΠΈΠ³ΡƒΡ€ создаСтся с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Rectangle ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Circle. Для
# Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² спискС ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ области ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
# Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (20) ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° (153,86).
shape = [Rectangle(4, 5), Circle(7)] # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Shape
для Ρ„ΠΎΡ€ΠΌΡ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ…:
    print(shape.area()) # Π’Ρ‹Π²ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Shape
 

Абстракция

Абстракция β€” ваТная концСпция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° позволяСт ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° основных характСристиках ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ систСмы, игнорируя Π΄Π΅Ρ‚Π°Π»ΠΈ, Π½Π΅ относящиСся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ контСксту. БниТая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ скрывая Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ, абстракция ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ, Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ для чтСния ΠΈ обслуТивания.

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

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

Python Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ абстрактных классов ΠΈΠ»ΠΈ интСрфСйсов, Π½ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля abc (абстрактный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс). Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прСдоставляСт класс ABC ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ abstractmethod, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для опрСдСлСния абстрактных классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π’ Ρ†Π΅Π»ΠΎΠΌ, абстракция β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для управлСния ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ качСства ΠΊΠΎΠ΄Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Python прСдоставляСт ряд возмоТностСй для достиТСния абстракции Π² вашСм ΠΊΠΎΠ΄Π΅.

 # Π˜ΠΌΠΏΠΎΡ€Ρ‚ модуля abc для опрСдСлСния абстрактных классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
ΠΈΠ· abc ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ABC, abstractmethod
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ абстрактный класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Shape, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΈΠΌΠ΅Π½Π΅ΠΌ area
Π€ΠΎΡ€ΠΌΠ° класса (ABC):
    @абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я):
        ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс Rectangle, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Shape
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°):
    def __init__(я, ΡˆΠΈΡ€ΠΈΠ½Π°, высота):
        собствСнная ΡˆΠΈΡ€ΠΈΠ½Π° = ΡˆΠΈΡ€ΠΈΠ½Π°
        self.height = высота
    # Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я):
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.width * self.height
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс Circle, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ наслСдуСтся ΠΎΡ‚ Shape
класс ΠšΡ€ΡƒΠ³ (Π€ΠΎΡ€ΠΌΠ°):
    def __init__(я, радиус):
        self.radius = радиус
    # Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ для ΠΊΡ€ΡƒΠ³ΠΎΠ²
    ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (я):
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 3,14 * собствСнный радиус ** 2
# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ список Ρ„ΠΈΠ³ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠ°ΠΊ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΊΡ€ΡƒΠ³ΠΈ
Ρ„ΠΎΡ€ΠΌΡ‹ = [ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (4, 5), ΠΊΡ€ΡƒΠ³ (7)]
# ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π² спискС ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ ΠΈΡ… ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ
для Ρ„ΠΎΡ€ΠΌΡ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ…:
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ„ΠΎΡ€ΠΌΠ°. ΠΎΠ±Π»Π°ΡΡ‚ΡŒ())
 

Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· основных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП Π² Python. Π­Ρ‚Π° страница Π² настоящСС врСмя находится Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΈ вскорС появятся Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ пояснСния.

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

Π’ΠΎ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ написали Π΄ΠΎ сих ΠΏΠΎΡ€, ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚. Π΅. Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ называСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом программирования . Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π­Ρ‚ΠΎ называСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования . Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ написании Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, которая Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ двумя основными аспСктами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Класс создаСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ , Π³Π΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами класса. Аналогия Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° int , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся Ρ†Π΅Π»Ρ‹Π΅ числа, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ) класса int .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ для программистов Π½Π° статичСских языках

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (класса int ). Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ C++ ΠΈ Java (Π΄ΠΎ вСрсии 1.5), Π³Π΄Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ€ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π‘ΠΌ. help(int) для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ классС.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ C# ΠΈ Java 1.5 Π½Π°ΠΉΠ΄ΡƒΡ‚ это ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° бокс ΠΈ распаковка ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚.

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

Поля Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ экзСмпляру/ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ самому классу. Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ экзСмпляра ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ класса соотвСтствСнно.

Класс создаСтся с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class . Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса пСрСчислСны Π² Π±Π»ΠΎΠΊΠ΅ с отступом.

Π‘Π°ΠΌ

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ спСцифичСскоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Π²Ρ‹ Π½Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΅Π³ΠΎ прСдоставит Python. Π­Ρ‚Π° конкрСтная пСрСмСнная относится ΠΊ самому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ , ΠΈ ΠΏΠΎ соглашСнию Π΅ΠΉ даСтся имя self .

Π₯отя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π°Ρ‚ΡŒ любоС имя для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя самого сСбя — любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ осуТдаСтся. Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств Π² использовании стандартного ΠΈΠΌΠ΅Π½ΠΈ — любой Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сразу ΡƒΠ·Π½Π°Π΅Ρ‚ Π΅Π³ΠΎ, ΠΈ Π΄Π°ΠΆΠ΅ спСциализированныС IDE (ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сам .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ для программистов Π½Π° C++/Java/C#

self Π² Python эквивалСнтСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ this Π² C++ ΠΈ ссылкС this Π² Java ΠΈ C#.

Π’Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ интСрСсно, ΠΊΠ°ΠΊ Python Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для self ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прояснит это. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass ΠΈ экзСмпляр этого класса с ΠΈΠΌΠ΅Π½Π΅ΠΌ 9. 0077 ΠΌΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ . Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ myobject.method(arg1, arg2) , ΠΎΠ½ автоматичСски прСобразуСтся Python Π² MyClass.method(myobject, arg1, arg2) β€” это всС, Ρ‡Ρ‚ΠΎ касаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ self . .

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” self .

ΠšΠ»Π°ΡΡΡ‹

Π‘Π°ΠΌΡ‹ΠΉ простой класс ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ oop_simplestclass.py ).

 класс Π›ΠΈΡ†ΠΎ:
    pass # ΠŸΡƒΡΡ‚ΠΎΠΉ Π±Π»ΠΎΠΊ
Ρ€ = Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ()
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ€)
 

Π’Ρ‹Ρ…ΠΎΠ΄:

 $ ΠΏΠΈΡ‚ΠΎΠ½ oop_simplestclass.py
ЭкзСмпляр <__main__.Person ΠΏΠΎ адрСсу 0x10171f518>
 

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠœΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ class ΠΈ имя класса. Π”Π°Π»Π΅Π΅ слСдуСт Π±Π»ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² с отступом, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π»ΠΎ класса. Π’ этом случаС Ρƒ нас Π΅ΡΡ‚ΡŒ пустой Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обозначаСтся Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 9. 0077 ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ выписку.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚/экзСмпляр этого класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя класса, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΏΠ°Ρ€Π° ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок. (ΠœΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ большС ΠΎ инстанцировании Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅). Для нашСй ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, просто пСчатая Π΅Π΅. Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ экзСмпляр класса Person Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ __main__ .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ адрСс памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π³Π΄Π΅ хранится ваш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚Π°ΠΊΠΆΠ΅ пСчатаСтся. АдрСс Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Python ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ мСсто.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали, Ρ‡Ρ‚ΠΎ классы/ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная self . Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (сохранитС ΠΊΠ°ΠΊ oop_method.py ).

 класс Π›ΠΈΡ†ΠΎ:
    def say_hi (я):
        print('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?')
Ρ€ = Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ()
p.say_hi ()
# ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ 2 строки Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ
# Π§Π΅Π»ΠΎΠ²Π΅ΠΊ(). say_hi()
 

Π’Ρ‹Ρ…ΠΎΠ΄:

 $ ΠΏΠΈΡ‚ΠΎΠ½ oop_method.py
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?
 

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ self Π² дСйствии. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ say_hi Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ self Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄

__init__

МногиС ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² классах Python. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__ .

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ oop_init.py ):

 класс Π›ΠΈΡ†ΠΎ:
    def __init__(я, имя):
        self.name = имя
    def say_hi (я):
        print('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚', self. name)
p = Π§Π΅Π»ΠΎΠ²Π΅ΠΊ('Swaroop')
p.say_hi ()
# ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ 2 строки Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ
# Π§Π΅Π»ΠΎΠ²Π΅ΠΊ('Π‘Π²Π°Ρ€ΡƒΠΏ').say_hi()
 

Π’Ρ‹Ρ…ΠΎΠ΄:

 $ ΠΏΠΈΡ‚ΠΎΠ½ oop_init.py
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Π‘Π²Π°Ρ€ΡƒΠΏ.
 

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ опрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ name (наряду с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ self ). Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ просто создаСм Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ name . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «имя». Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ self.name ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ «имя», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ «я», Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ имя β€” это локальная пСрСмСнная. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ имя ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Ρƒ, ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚.

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра p класса Person ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя класса, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² скобках: p = Person(‘Swaroop’).

ΠœΡ‹ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ явно ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ . Π’ этом особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ self.name Π² Π½Π°ΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, Ρ‡Ρ‚ΠΎ дСмонстрируСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ say_hi .

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠœΡ‹ ΡƒΠΆΠ΅ обсудили Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ части Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ поля, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ привязаны ΠΊ пространствам ΠΈΠΌΠ΅Π½ классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эти ΠΈΠΌΠ΅Π½Π° допустимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС этих классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ пространства ΠΈΠΌΠ΅Π½ .

БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»Π΅ΠΉ — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π»ΠΈ классу ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ соотвСтствСнно.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ β€” ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ всС экзСмпляры этого класса. БущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ класса, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ измСняСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса, это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ экзСмплярам.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ/экзСмпляру класса. Π’ этом случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию поля, Ρ‚.Π΅. ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны с ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ экзСмплярС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ (сохранитС ΠΊΠ°ΠΊ oop_objvar.py ):

Π ΠΎΠ±ΠΎΡ‚ класса
:
    """ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€ΠΎΠ±ΠΎΡ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ."""
    # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ класса, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ количСство Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ²
    насСлСниС = 0
    def __init__(я, имя):
        """Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅."""
        self.name = имя
        print("(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ {})".format(self.name))
        # Когда этот Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ создан, Ρ€ΠΎΠ±ΠΎΡ‚
        # добавляСт Π² ΠΏΠΎΠΏΡƒΠ»ΡΡ†ΠΈΡŽ
        Π ΠΎΠ±ΠΎΡ‚.насСлСниС += 1
    Π΄Π΅Ρ„ ΡƒΠΌΠ΅Ρ€Π΅Ρ‚ΡŒ (я):
        """Π― ΡƒΠΌΠΈΡ€Π°ΡŽ."""
        print("{} уничтоТаСтся!".format(self.name))
        Π ΠΎΠ±ΠΎΡ‚.насСлСниС -= 1
        Ссли Robot. population == 0:
            print("{} Π±Ρ‹Π» послСдним.".format(self.name))
        Π΅Ρ‰Π΅:
            print("Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΅Ρ‰Π΅ {:d} Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹.".format(
                Π ΠΎΠ±ΠΎΡ‚.популяция))
    def say_hi (я):
        """ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Ρ€ΠΎΠ±ΠΎΡ‚Π°.
        Π”Π°, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ."""
        print("ЗдравствуйтС, ΠΌΠΎΠΈ хозяСва Π·ΠΎΠ²ΡƒΡ‚ мСня {}.".format(self.name))
    @классмСтод
    ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сколько_ΠΌΠ½ΠΎΠ³ΠΎ (cls):
        """Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ насСлСния."""
        print("Π£ нас {:d} Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ².".format(cls.population))
droid1 = Π ΠΎΠ±ΠΎΡ‚ ("R2-D2")
droid1.say_hi()
Robot.how_many()
droid2 = Π ΠΎΠ±ΠΎΡ‚ ("C-3PO")
droid2.say_hi()
Robot.how_many()
print("\nΠ—Π΄Π΅ΡΡŒ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹.\n")
print("Π ΠΎΠ±ΠΎΡ‚Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠΌ.")
droid1.die()
droid2.die()
Robot.how_many()
 

Π’Ρ‹Ρ…ΠΎΠ΄:

 $ ΠΏΠΈΡ‚ΠΎΠ½ oop_objvar.py
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ R2-D2)
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ, ΠΌΠΎΠΈ мастСра Π·ΠΎΠ²ΡƒΡ‚ мСня R2-D2.
Π£ нас Π΅ΡΡ‚ΡŒ 1 Ρ€ΠΎΠ±ΠΎΡ‚.
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ C-3PO)
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ, ΠΌΠΎΠΈ мастСра Π·ΠΎΠ²ΡƒΡ‚ мСня C-3PO.
Π£ нас Π΅ΡΡ‚ΡŒ 2 Ρ€ΠΎΠ±ΠΎΡ‚Π°.
Π—Π΄Π΅ΡΡŒ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. 
Π ΠΎΠ±ΠΎΡ‚Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Π°ΠΊ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠΌ ΠΈΡ….
R2-D2 уничтоТаСтся!
Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΅Ρ‰Π΅ 1 Ρ€ΠΎΠ±ΠΎΡ‚.
C-3PO уничтоТаСтся!
C-3PO Π±Ρ‹Π» послСдним.
Π£ нас 0 Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ².
 

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π­Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π΄Π΅ΡΡŒ, 9ΠŸΠΎΠΏΡƒΠ»ΡΡ†ΠΈΡ 0077 ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ классу Π ΠΎΠ±ΠΎΡ‚ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ класса. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ name ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (ΠΎΠ½Π° назначаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ self ) ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ссылаСмся Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса насСлСния ΠΊΠ°ΠΊ Robot.population , Π° Π½Π΅ ΠΊΠ°ΠΊ self.population . ΠœΡ‹ ссылаСмся Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° имя , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ self.name Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этой простой Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пСрСмСнная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ пСрСмСнная класса, скроСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса!

ВмСсто Robot. population ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ self.__class__.population , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ссылаСтся Π½Π° свой класс Ρ‡Π΅Ρ€Π΅Π· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ self.__class__ .

how_many Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ классу, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса , Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса ΠΌΡ‹ являСмся. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ссылаСмся Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса .

ΠœΡ‹ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ how_many ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°.

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

ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ярлык для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Β«ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚Β» Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎ ΠΈΠ»ΠΈ послС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), поэтому ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @classmethod β€” это Ρ‚ΠΎ ΠΆΠ΅ самоС. ΠΏΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ:

 сколько_сколько = ΠΌΠ΅Ρ‚ΠΎΠ΄ класса (сколько_сколько)
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ __init__ 9ΠœΠ΅Ρ‚ΠΎΠ΄ 0078 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ экзСмпляра Robot с ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ число популяции Π½Π° 1, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас добавляСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€ΠΎΠ±ΠΎΡ‚. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ значСния self.name спСцифичны для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ self Ρ‚ΠΎΠ»ΡŒΠΊΠΎ . Π­Ρ‚ΠΎ называСтся ссылкой Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ .

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ использованиС строк Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ строкС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ класса Π²ΠΎ врСмя выполнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Robot.__doc__ ΠΈ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠ°ΠΊ Robot.say_hi.__doc__

.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ die ΠΌΡ‹ просто ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ количСство Robot.population Π½Π° 1.

ВсС Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹. Одно ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ прСфикс с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ __privatevar , Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ частной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, соглашСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любая пСрСмСнная, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с символа подчСркивания, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ общСдоступными ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ классами/ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это всСго лишь соглашСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ примСняСтся Python (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ прСфикса Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчСркивания).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ для программистов Π½Π° C++/Java/C#

ВсС Ρ‡Π»Π΅Π½Ρ‹ класса (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…) ΡΠ²Π»ΡΡŽΡ‚ΡΡ общСдоступными , Π° всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² Python.

НаслСдство

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

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

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° нСзависимых класса для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ характСристики Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΠΎΠΈΠΌ этим нСзависимым классам. Π­Ρ‚ΠΎ быстро становится Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ.

Π›ΡƒΡ‡ΡˆΠΈΠΌ способом Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ SchoolMember , Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ классы ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ этого класса, Ρ‚.Π΅. ΠΎΠ½ΠΈ станут ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ° (класса), ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ смоТСм Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ характСристики ΠΊ этим ΠΏΠΎΠ΄Π²ΠΈΠ΄Π°ΠΌ.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство прСимущСств. Если ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² SchoolMember , это автоматичСски отразится ΠΈ Π½Π° ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°Ρ…. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ удостовСрСния личности ΠΊΠ°ΠΊ для ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈ для ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Π³ΠΎ Π² класс SchoolMember. Однако измСнСния Π² ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°Ρ… Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ прСимущСством являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ учитСля ΠΈΠ»ΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΊ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ SchoolMember , Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ подсчСтС количСства Ρ‡Π»Π΅Π½ΠΎΠ² ΡˆΠΊΠΎΠ»Ρ‹. это называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ , Π³Π΄Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π² любой ситуации, ΠΊΠΎΠ³Π΄Π° оТидаСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ, Ρ‚. Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ экзСмпляр Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΈ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах, ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π±Ρ‹ ΠΌΡ‹ использовали нСзависимыС классы.

Класс SchoolMember Π² этой ситуации извСстСн ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ»ΠΈ супСркласс 9.0070 . ΠšΠ»Π°ΡΡΡ‹ Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ классами ΠΈΠ»ΠΈ подклассами .

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (сохранитС ΠΊΠ°ΠΊ oop_subclass.py ):

 классШкольник:
    '''ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ любого Ρ‡Π»Π΅Π½Π° ΡˆΠΊΠΎΠ»Ρ‹'''.
    def __init__(я, имя, возраст):
        self.name = имя
        возраст = возраст
        print('(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ SchoolMember: {})'.format(self.name))
    Π΄Π΅Ρ„ скаТи (сСбя):
        '''РасскаТи ΠΌΠΎΠΈ Π΄Π°Π½Π½Ρ‹Π΅'''.
        print('Имя:"{}" Возраст:"{}"'.format(self.name, self.age), end=" ")
ΠšΠ»Π°ΡΡΠ½Ρ‹ΠΉ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ (Ρ‡Π»Π΅Π½ ΡˆΠΊΠΎΠ»Ρ‹):
    '''ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ учитСля'''.
    def __init__(я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
        SchoolMember.__init__(я, имя, возраст)
        собствСнная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
        print('(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ: {})'.format(self.name))
    Π΄Π΅Ρ„ скаТи (сСбя):
        SchoolMember.tell (сам)
        print('Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°: "{:d}"'.format(self.salary))
Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ класса (Ρ‡Π»Π΅Π½ ΡˆΠΊΠΎΠ»Ρ‹):
    '''ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ студСнта'''.
    def __init__(я, имя, возраст, ΠΎΡ†Π΅Π½ΠΊΠΈ):
        SchoolMember.__init__(я, имя, возраст)
        self. marks = ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ
        print('(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π½ΠΈΠΊ: {})'.format(self.name))
    Π΄Π΅Ρ„ скаТи (сСбя):
        SchoolMember.tell (сам)
        print('ΠžΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ: "{:d}"'.format(self.marks))
t = Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ («Миссис Π¨Ρ€ΠΈΠ²ΠΈΠ΄ΡŒΡΒ», 40, 30000)
s = Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚('Swaroop', 25, 75)
# ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку
Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ()
Ρ‡Π»Π΅Π½Ρ‹ = [Ρ‚, с]
для Ρ‡Π»Π΅Π½Π° Π² Ρ‡Π»Π΅Π½Π°Ρ…:
    # Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ для ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈ для студСнтов
    Ρ‡Π»Π΅Π½.расскаТи()
 

Π’Ρ‹Ρ…ΠΎΠ΄:

 $ ΠΏΠΈΡ‚ΠΎΠ½ oop_subclass.py
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ ΡˆΠΊΠΎΠ»Ρ‹: миссис Π¨Ρ€ΠΈΠ²ΠΈΠ΄ΡŒΡ)
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ: миссис Π¨Ρ€ΠΈΠ²ΠΈΠ΄ΡŒΡ)
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ ΡˆΠΊΠΎΠ»Ρ‹: Π‘Π²Π°Ρ€ΡƒΠΏ)
(Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π½ΠΈΠΊ: Π‘Π²Π°Ρ€ΡƒΠΏ)
Имя: "Миссис Π¨Ρ€ΠΈΠ²ΠΈΠ΄ΡŒΡ" Возраст: "40" Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°: "30000"
Имя: "Swaroop" Возраст: "25" ΠžΡ†Π΅Π½ΠΊΠ°: "75"
 

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдованиС, ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ класса Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, class Teacher(SchoolMember) ). Π”Π°Π»Π΅Π΅ ΠΌΡ‹ наблюдаСм, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся явно с использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ self , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса экзСмпляра Π² подклассС. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ опрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ Π² подклассах Teacher ΠΈ Student , Python Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ автоматичСски конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса SchoolMember , Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Напротив, Ссли ΠΌΡ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ Π² подклассС, Python автоматичСски Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Π₯отя ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ экзСмпляры Teacher ΠΈΠ»ΠΈ Student Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ экзСмпляр SchoolMember , ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ tell SchoolMember , просто Π½Π°Π±Ρ€Π°Π² Teacher.tell ΠΈΠ»ΠΈ . Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚.скаТи , ΠΌΡ‹ вмСсто этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ tell Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ подклассС (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ SchoolMember частично), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для этого подкласса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ сдСлали это, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм Teacher.tell , Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ tell для этого подкласса ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с супСрклассом.