Ооп Π² python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

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

Pythonicway — ООП Π² Python

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

ВСрминология ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования:

  • Класс (Class): ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ программистом ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Доступ ΠΊ Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ класса (Class variable): ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, доступная для всСх экзСмпляров Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π½ΠΎ Π²Π½Π΅ Π»ΡŽΠ±Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса.
  • ЭкзСмпляр класса (Instance): ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ экзСмпляра класса (Instance variable): ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ опрСдСлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Π΄ΠΎΡ‚Π° класса, принадлСТащая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ этому классу.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ (Method): Особая функция, опрСдСлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ класса.
  • НаслСдованиС (Inheritance): ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классам.
  • ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Function overloading): ИзмСнСниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, унаслСдованного Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.
  • ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (Operator overloading): ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² с экзСмплярами Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

БозданиС класса в Python:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class, послС Π½Π΅Π³ΠΎ слСдуСт имя класса ΠΈ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ с отступом ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сам класс.

class Elevator:
    """ Simple elevator class """
    # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ класса. Бколько людСй Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π·Π΅Π½ΠΎ Π’Π‘Π•ΠœΠ˜ Π»ΠΈΡ„Ρ‚Π°ΠΌΠΈ
    people_lifted = 0

    # ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса. ВызываСтся ΠΏΡ€ΠΈ создании экзСмпляра класса
    def __init__(self,name):
        self.name = name
        # пСрСмСнная экзСмпляра класса. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ людСй ΠΏΠ΅Ρ€Π΅Π²Π΅Π·Π΅Π½Π½Ρ‹Ρ… ΠšΠžΠΠšΠ Π•Π’ΠΠ«Πœ Π»ΠΈΡ„Ρ‚ΠΎΠΌ
        self.people_lifted = 0

    # ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ людСй
    def lift(self):
        print ("{} lifted someone".format(self.name))
        # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство людСй ΠΏΠ΅Ρ€Π΅Π²Π΅Π·Π΅Π½Π½Ρ‹Ρ… ЭВИМ Π»ΠΈΡ„Ρ‚ΠΎΠΌ
        self.people_lifted += 1
        # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство людСй ΠΏΠ΅Ρ€Π΅Π²Π΅Π·Π΅Π½Π½Ρ‹Ρ… Π’Π‘Π•ΠœΠ˜ Π»ΠΈΡ„Ρ‚Π°ΠΌΠΈ
        Elevator.people_lifted += 1

    # ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Π»ΠΈΡ„Ρ‚Π΅
    def info(self):
        print (self.name, "lifted", self.people_lifted, "people out of", Elevator.people_lifted)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляров класса:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса слСдуСт любой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ класса, ΡƒΠΊΠ°Π·Π°Π² Π² скобках Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__().

elevator_1 = Elevator("OTIS")
elevator_2 = Elevator("PHILLIPS")

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса Π² Python слСдуСт послС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

# Π’Π΅Π·Π΅ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π² Π»ΠΈΡ„Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ OTIS
elevator_1.lift()
# Π’Π΅Π·Π΅ΠΌ Π΄Π²ΠΎΠΈΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π² Π»ΠΈΡ„Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ PHILLIPS
elevator_2.lift()
elevator_2.lift()
# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Π»ΠΈΡ„Ρ‚Ρƒ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ OTIS
elevator_1.info()
# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Π»ΠΈΡ„Ρ‚Ρƒ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ PHILLIPS
elevator_2.info()

Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ² всС это Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π΅Ρ‰Π΅ рассмотрим:

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

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

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Python.

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… класса Π² Python.

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

Π­Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎΠ΅ ООП Π½Π° Python. Π‘Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ словарСй… | by Iuliia Averianova | NOP::Nuances of Programming

Π‘ΠΈΠ»Π° Python Π² Π΅Π³ΠΎ гибкости. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых языков для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Иногда Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽΡ‚ Π·Π° Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ самый элСгантный Π½Π° ΠΌΠΎΠΉ взгляд способ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π² Python. ΠšΠ»ΡŽΡ‡ ΠΊ элСгантности β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° marshmallow. Она устанавливаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ pip install marshmallow.

Для дСмонстрации Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с объявлСния простого класса User:

class User(object):
def __init__(self, name, age):
self.name = name
self.age = agedef __repr__(self):
return f'I am {self.name} and my age is {self.age}'

OK. Π£ User Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: name ΠΈ age. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄ __repr__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³Π»ΠΈ вывСсти экзСмпляр для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ marshmallow:

from marshmallow import Schema, fields, post_load
from pprint import pprint

Π― ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» pprint, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ мноТСство словарСй ΠΈ списков. Π’Π°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ marshmallow? ΠŸΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просто: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Schema для класса User:

class UserSchema(Schema):
name = fields.String()
age = fields.Integer()@post_load
def make(self, data, **kwargs):
return User(**data)

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ поля β€” fields, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‚ΠΈΠΏ. Аннотация @post_load ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ. Она Π½ΡƒΠΆΠ½Π° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ схСмы Π² качСствС экзСмпляра ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ класса. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² нашСм случаС ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ экзСмпляров User. ΠœΠ΅Ρ‚ΠΎΠ΄ make Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ экзСмпляр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Если Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON) ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ экзСмпляр, пишСм Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

data = {
'name': 'Chris',
'age': 32
}schema = UserSchema()
user = schema.load(data)

Всё просто! Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ схСмы load() ΠΈ дСсСриализуСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON Π² экзСмпляр класса.

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с массивом JSON, содСрТащим мноТСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для дСсСриализации? НС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ for, просто ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ many=True:

data = [{
'name': 'Alice',
'age': 20
}, {
'name': 'Bob',
'age': 25
}, {
'name': 'Chris',
'age': 32
}]schema = UserSchema()
users = schema.load(data, many=True)

OK. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ load() для прСобразования словарСй Π² экзСмпляры. Как насчёт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ дСйствия? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ dump():

dict = schema.dump(users, many=True)

Π—Π΄Π΅ΡΡŒ users β€” список экзСмпляров ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ прСобразуСтся Π² массив JSON ΠΎΠ΄Π½ΠΎΠΉ строкой ΠΊΠΎΠ΄Π°!

Π”ΡƒΠΌΠ°Π΅Ρ‚Π΅, marshmallow ΡƒΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ экзСмпляры? Если Π±Ρ‹ это Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊ, я Π±Ρ‹ вряд Π»ΠΈ взялся Π·Π° эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. Бамая мощная функция этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” валидация. Начнём с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ValidationError, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· marshmallow:

from marshmallow import ValidationError

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ объявили UserSchema Π²Ρ‹ΡˆΠ΅ с ΠΏΠΎΠ»Π΅ΠΌ age ΠΊΠ°ΠΊ Integer? Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ нСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅?

data = [{
'name': 'Alice',
'age': 20
}, {
'name': 'Bob',
'age': 25
}, {
'name': 'Chris',
'age': 'thirty two'
}]

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” Chris β€” Π² массивС JSON ΠΈΠΌΠ΅Π΅Ρ‚ нСдопустимый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅Π³ΠΎ нСльзя ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠ΅ число. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ load(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив.

try:
schema = UserSchema()
users = schema.load(data, many=True)
except ValidationError as e:
print(f'Error Msg: {e.messages}')
print(f'Valid Data: {e.valid_data}')

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΉΠΌΠ°Π½ΠΎ, ΠΎΠ½ΠΎ сообщаСт ΠΎ нСдопустимом Ρ†Π΅Π»ΠΎΠΌ числС. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…!

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Π² индСксС 2, ΠΈ допустимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всё Π΅Ρ‰Ρ‘ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… нСдостаточно. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΡƒΠ΄Π° большС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² класс User Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ gender.

class User(object):
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = genderdef __repr__(self):
return f'I am {self.name}, my age is {self.age} and my gender is {self.gender}'

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ схСму с валидациями. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ validate.

from marshmallow import validateclass UserSchema(Schema):
name = fields.String(validate=validate.Length(min=1))
age = fields.Integer(validate=validate.Range(min=18, max=None))
gender = fields.String(validate=validate.OneOf(['F', 'M', 'Other']))

ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΊΠΎ всСм Ρ‚Ρ€Ρ‘ΠΌ полям.

  • Π£ name Π΄Π»ΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ хотя Π±Ρ‹ Π² 1 символ. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым.
  • Π£ age Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ 18.
  • ПолС gender Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON с нСдопустимыми значСниями всСх ΠΏΠΎΠ»Π΅ΠΉ:

data = {
'name': '',
'age': 16,
'gender': 'X'
}

И ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ:

try:
UserSchema().load(data)
except ValidationError as e:
pprint(e.messages)

ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° я ΡƒΠ²ΠΈΠ΄Π΅Π» этот Π²Ρ‹Π²ΠΎΠ΄ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, мСня ΠΏΠΎΡ€Π°Π·ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… встроСны ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π― сэкономил ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ!

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π»ΠΈ ΠΌΡ‹ встроСнными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π΄Π»ΠΈΠ½Π° ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:

def validate_age(age):
if age < 18:
raise ValidationError('You must be an adult to buy our products!')class UserSchema(Schema):
name = fields.String(validate=validate.Length(min=1))
age = fields.Integer(validate=validate_age)
gender = fields.String(validate=validate.OneOf(['F', 'M', 'Other']))

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ validate_age с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ сообщСниСм. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ age мСньшС 18.

data = {
'name': 'Chris',
'age': 17,
'gender': 'M'
}try:
user = UserSchema().load(data)
except ValidationError as e:
pprint(e.messages)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ validate_age примСняСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ сообщСниС ΠΎΠ± ошибкС. НиТС элСгантная рСализация:

class UserSchema(Schema):
name = fields.String()
age = fields.Integer()
gender = fields.String()@validates('age')
def validate_age(self, age):
if age < 18:
raise ValidationError('You must be an adult to buy our products!')

Π§Π΅Ρ€Π΅Π· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΌΡ‹ опрСдСляСм Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ поля, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ заполнСния:

class UserSchema(Schema):
name = fields.String(required=True, error_messages={'required': 'Please enter your name.'})
age = fields.Integer(required=True, error_messages={'required': 'Age is required.'})
email = fields.Email()

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ поля name ΠΈ age. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π±Π΅Π· элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹:

data_no_email = {
'name': 'Chris',
'age': 32
}try:
user = UserSchema().load(data_no_email)
except ValidationError as e:
pprint(e.messages)

OK. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ. Π§Ρ‚ΠΎ, Ссли Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΈ имя, Π½ΠΈ возраст?

data_no_name_age = {
'email': '[email protected]'
}try:
user = UserSchema().load(data_no_name_age)
except ValidationError as e:
print(f'Error Msg: {e.messages}')
print(f'Valid Data: {e.valid_data}')

Появилось ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ для ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ.

Иногда Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, вмСсто Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

class UserSchema(Schema):
name = fields.String(missing='Unknown', default='Unknown')print(UserSchema().load({})) # ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "missing"
print(UserSchema().dump({})) # ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "default"

Π’ marshmallow сущСствуСт Π΄Π²Π° способа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово missing опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ дСсСриализации экзСмпляра с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ load().
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово default опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ сСриализации экзСмпляра с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dump().

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΎΠ±Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слова ΠΈ поэкспСримСнтировали Π½Π°Π΄ пустым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ load(), ΠΈ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ dump(). Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ name со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΊΠΎΠ½Π΅Ρ†, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ πŸ™‚

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ расхоТдСниС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов ΠΈ фактичСских Π΄Π°Π½Π½Ρ‹Ρ… Π² JSON, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ расхоТдСниС ΠΈΠΌΡ‘Π½ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НапримСр, Π² User ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя для этого поля β€” username. Π’ нашСм случаС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ классы, Π½ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ JSON. МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

class User(object):
def __init__(self, name, age):
self.name = name
self.age = agedef __repr__(self):
return f'I am {self.name} and my age is {self.age}'class UserSchema(Schema):
username = fields.String(attribute='name')
age = fields.Integer()@post_load
def make(self, data, **kwargs):
return User(**data)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² User Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ name, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² UserSchema Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ username. Но для username ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ attribute Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ name. Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ экзСмпляр класса User:

user = User('Chris', 32)
UserSchema().dump(user)

dump ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ сСриализовал экзСмпляр с ΠΈΠΌΠ΅Π½Π΅ΠΌ поля username. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

data = {
'username': 'Chris',
'age': 32
}
UserSchema().load(data)

Π”Π°ΠΆΠ΅ Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ username, ΠΎΠ½ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ дСсСриализуСтся Π² экзСмпляр User.

И послСднСС, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅, Ρ‡Π΅ΠΌ всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅: marshmallow ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

class Address(object):
def __init__(self, street, suburb, postcode):
self.street = street
self.suburb = suburb
self.postcode = postcodedef __repr__(self):
return f'{self.street}, {self.suburb} {self.postcode}'class User(object):
def __init__(self, name, address):
self.name = name
self.address = address

def __repr__(self):
return f'My name is {self.name} and I live at {self.address}'

ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π° класса: Address ΠΈ User. Π£ User Π΅ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ address, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Address. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

address = Address('1, This St', 'That Suburb', '1234')
user = User('Chris', address)
print(user)

И ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ схСму:

class AddressSchema(Schema):
street = fields.String()
suburb = fields.String()
postcode = fields.String()@post_load
def make(self, data, **kwargs):
return Address(**data)class UserSchema(Schema):
name = fields.String()
address = fields.Nested(AddressSchema())@post_load
def make(self, data, **kwargs):
return User(**data)

Π₯ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ fields.Nested() для опрСдСлСния поля ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ схСмС. Π£ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ экзСмпляр User. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Π΅Π³ΠΎ Π΄Π°ΠΌΠΏ Π² JSON:

pprint(UserSchema().dump(user))

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, экзСмпляр сСриализован Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

data = {
'name': 'Chris',
'address': {
'postcode': '1234',
'street': '1, This St',
'suburb': 'That Suburb'
}
}
pprint(UserSchema().load(data))

На сСгодня всё. Бпасибо, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ! Код ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π½Π° Google Colab.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ нас Π² Telegram, VK ΠΈ ЯндСкс.Π”Π·Π΅Π½

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ расскаТСм ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (ООП) Π² Python ΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… концСпциях.

Python β€” это ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык.Β Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ являСтся созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Она извСстна ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП).

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

  • Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹;
  • ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅;

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ – это ΠΏΠΎΠΏΡƒΠ³Π°ΠΉ:

  • имя, возраст, Ρ†Π²Π΅Ρ‚ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ;
  • ΠΏΠ΅Π½ΠΈΠ΅, Ρ‚Π°Π½Ρ†Ρ‹ β€” это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅;

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ООП Π² Python Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° ​​на созданиС ΠΊΠΎΠ΄Π° для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования.Β Π­Ρ‚Π° концСпция Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ DRY (Don’t Repeat Yourself).

Π’ Python концСпция ООП Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ нСсколько ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

НаслСдованиСИспользованиС элСмСнтов ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Π±Π΅Π· измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса.
Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡΠ‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… элСмСнтов класса ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ интСрфСйсом Π±Π΅Π· получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структурС.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ класс ΠΊΠ°ΠΊ эскиз попугая с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ. Он содСрТит всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ, Ρ†Π²Π΅Ρ‚Π΅, Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ Ρ‚. Π΄. На основС этого описания ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ попугая.Β Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠΏΡƒΠ³Π°ΠΉ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ для класса попугая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для опрСдСлСния пустого класса ParrotΒ . Из класса ΠΌΡ‹ создаСм экзСмпляр – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ β€” это экзСмпляр класса.Β Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса задаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.Β ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Parrot:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС obj являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Parrot.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ информация ΠΎ ΠΏΠΎΠΏΡƒΠ³Π°Π΅.Β Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ класс ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Parrot.

class Parrot:

    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ класса
    species = "bird"

    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ экзСмпляра
    def __init__(self, name, age):
        self.name = name
        self.age = age

# создаСм экзСмпляр класс Parrot
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)

# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))

# ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ экзСмпляра
print("{} is {} years old".format( blu.name, blu.age))
print("{} is {} years old".format( woo.name, woo.age))

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Blu is a bird
Woo is also a bird
Blu is 10 years old
Woo is 15 years old

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создаСм класс с ΠΈΠΌΠ΅Π½Π΅ΠΌΒ Parrot.Β Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ характСристикой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм экзСмпляры класса Parrot.Β Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС bluΒ ΠΈΒ wooΒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылками  Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ПослС этого ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΒ __class __.species. Атрибуты класса ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ для всСх Π΅Π³ΠΎ экзСмпляров.Β Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ экзСмпляра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡΒ blu.name ΠΈ blu.age. Но Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра класса.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния повСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

class Parrot:
    
    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра
    def sing(self, song):
        return "{} sings {}".format(self.name, song)

    def dance(self):
        return "{} is now dancing".format(self.name)

# создаСм экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
blu = Parrot("Blu", 10)

# Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра
print(blu.sing("'Happy'"))
print(blu.dance())

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Blu sings 'Happy'
Blu is now dancing

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ опрСдСляСм Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β sing() ΠΈΒ dance().Β Π˜Ρ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ экзСмпляра,Β Ρ‚Π°ΠΊ ΠΊΠ°ΠΊΒ ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ для экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для blu.

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

# Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс
class Bird:
    
    def __init__(self):
        print("Bird is ready")

    def whoisThis(self):
        print("Bird")

    def swim(self):
        print("Swim faster")

# Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
class Penguin(Bird):

    def __init__(self):
        # Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ super()
        super().__init__()
        print("Penguin is ready")

    def whoisThis(self):
        print("Penguin")

    def run(self):
        print("Run faster")

peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Bird is ready
Penguin is ready
Penguin
Swim faster
Run faster

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создали Π΄Π²Π° класса:Β BirdΒ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс) ΠΈΒ PenguinΒ (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс). Он наслСдуСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.Β Π­Ρ‚ΠΎ прослСТиваСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Β swim().

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса – ΠΌΠ΅Ρ‚ΠΎΠ΄ whoisThis().Β Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, создав Π½ΠΎΠ²Ρ‹ΠΉΒ ΠΌΠ΅Ρ‚ΠΎΠ΄ run().

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ super() ΠΏΠ΅Ρ€Π΅Π΄Β ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ __init__(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ содСрТимоС мСтода __init__() ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ООП Π² Python, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.Β Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½Π΅ класса. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся инкапсуляциСй.Β Π’ Python ΠΌΡ‹ устанавливаСм ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² качСствС прСфикса ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Β«_Β» ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Β«_ _Β» ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅.

class Computer:

    def __init__(self):
        self.__maxprice = 900

    def sell(self):
        print("Selling Price: {}".format(self.__maxprice))

    def setMaxPrice(self, price):
        self.__maxprice = price

c = Computer()
c.sell()

# измСняСм Ρ†Π΅Π½Ρƒ
c.__maxprice = 1000
c.sell()

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сСттСра
c.setMaxPrice(1000)
c.sell()

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Selling Price: 900
Selling Price: 900
Selling Price: 1000

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ класс ComputerΒ .Β Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈΒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__() для хранСния значСния максимальной стоимости ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ΠœΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρƒ, Π½ΠΎ Π½Π΅ смогли, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Python рассматриваСт __maxprice,Β ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.Β Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сСттСра. Π’ΠΎ Π΅ΡΡ‚ΡŒ,Β setMaxPrice(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π½Ρƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ β€” это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ООП ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΠΎΡ€ΠΌ (Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…).

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ.Β  Π•ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΊΡ€ΡƒΠ³).Β ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.Β Π­Ρ‚Π° концСпция называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ.

class Parrot:

    def fly(self):
        print("Parrot can fly")
    
    def swim(self):
        print("Parrot can't swim")

class Penguin:

    def fly(self):
        print("Penguin can't fly")
    
    def swim(self):
        print("Penguin can swim")

# ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс
def flying_test(bird):
    bird.fly()

#создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
blu = Parrot()
peggy = Penguin()

# ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
flying_test(blu)
flying_test(peggy)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Parrot can fly
Penguin can't fly

ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π° класса:Β ParrotΒ ΠΈΒ PenguinΒ .Β Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Β  fly(), Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΌΡ‹ создали ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс. Π’ΠΎ Π΅ΡΡ‚ΡŒ,Β Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ flying_test(), которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.Β Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹Β bluΒ ΠΈΒ peggyΒ Π²Β Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ flying_test().

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ становится простым ΠΈ эффСктивным.
  • Класс ΠΎΠ±Ρ‰ΠΈΠΉ, поэтому ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ программистов увСличиваСтся.
  • Благодаря абстракции Π΄Π°Π½Π½Ρ‹Π΅ становятся бСзопасными ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ.

Данная публикация являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Python Object Oriented ProgrammingΒ» , подготовлСнная Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° PythonΒ β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python с использованиСм ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ООП: с самого Π½Π°Ρ‡Π°Π»Π° Python проСктировался ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования[1].

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Богласно Алану ΠšΡΡŽΒ β€” Π°Π²Ρ‚ΠΎΡ€Ρƒ языка программирования SmalltalkΒ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ язык, построСнный с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²[2]:

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΈΠΏΡ‹ ΠΈ классы

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса

Для ясности ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ излоТСния рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса. Для опрСдСлСния класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ class:

    class имя_класса(надкласс1, надкласс2, ...):
        # опрСдСлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса

Π£ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅) классы (надклассы), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ) ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² скобках послС ΠΈΠΌΠ΅Π½ΠΈ опрСдСляСмого класса.

Минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса выглядит Ρ‚Π°ΠΊ:

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Python Ρ‡Π»Π΅Π½Ρ‹ класса Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса — ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Π° поля класса — свойствами (ΠΈΠ»ΠΈ просто Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ).

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ опрСдСлСниям Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ (Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈΠΆΠ΅) ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСгда ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ принятому соглашСнию self:

    class A:
        def m1(self, x):
            # Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²Β β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Π’ языкС Python класс Π½Π΅ являСтся Ρ‡Π΅ΠΌ-Ρ‚ΠΎ статичСским послС опрСдСлСния, поэтому Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ послС:

    class A:
        pass
 
    def myMethod(self, x):
        return x * x
 
    A.m1 = myMethod
    A.attr1 = 2 * 2

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β β€” экзСмпляра класса (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, инстанциирования класса), достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ класс ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора:

    class Point:
         def __init__(self, x, y, z):
             self.coord = (x, y, z)
         def __repr__(self):
             return "Point(%s, %s, %s)" % self.coord
>>> p = Point(0.0, 1.0, 0.0)
>>> p
Point(0.0, 1.0, 0.0)

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² классовый ΠΌΠ΅Ρ‚ΠΎΠ΄ __new__, ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания экзСмпляра. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init__ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр, Π»ΠΈΠ±ΠΎ None (Π² послСднСм случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ __new__ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса). ΠœΠ΅Ρ‚ΠΎΠ΄ __new__ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния созданиСм Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹Ρ… (immutable) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², управлСния созданиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² случаях, ΠΊΠΎΠ³Π΄Π° __init__ Π½Π΅ вызываСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ дСсСриализации (unpickle). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ дСмонстрируСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблона ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ°:

>>> class Singleton(object):
        obj = None                           # Атрибут для хранСния СдинствСнного экзСмпляра
        def __new__(cls,*dt,**mp):           # класса Singleton.
           if cls.obj is None:               # Если ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ создан, Ρ‚ΠΎ
              cls.obj = object.__new__(cls,*dt,**mp) # Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ __new__ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса
           return cls.obj                    # Π²Π΅Ρ€Π½Π΅ΠΌ синглтон
...
>>> obj = Singleton()
>>> obj.attr = 12
>>> new_obj = Singleton()
>>> new_obj.attr                       
12
>>> new_obj is obj                     # new_obj ΠΈ obj - это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
True

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор

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

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор ΠΈ дСструктор:

class Line:
    def __init__(self, p1, p2):
        self.line = (p1, p2)
    def __del__(self):
        print "УдаляСтся линия %s - %s" % self.line
>>> l = Line((0.0, 1.0), (0.0, 2.0))
>>> del l
УдаляСтся линия (0.0, 1.0) - (0.0, 2.0)
>>>

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° дСструктора (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) срСда исполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ достаточно «истощСнной», поэтому Π² дСструкторС слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самоС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π² дСструкторС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π‘Π΅Π· примСнСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ особых срСдств врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Python, Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния процСсса этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для прСодолСния этого ограничСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ возмоТности: ΠΎΡ‚ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (shelve), примСнСния ORM (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SQLAlchemy) Π΄ΠΎ использования спСциализированных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΌΠΈ возмоТностями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ZODB). ВсС эти срСдства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ устойчивыми (Π°Π½Π³Π».Β persistent). Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈ записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° производится Π΅Π³ΠΎ сСриализация, Π° ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈΒ β€” дСсСриализация.

>>> import shelve
>>> s = shelve.open("somefile.db")
>>> s['myobject'] = [1, 2, 3, 4, 'свСчка']
>>> s.close()
 
>>> import shelve
>>> s = shelve.open("somefile.db")
>>> print s['myobject']
[1, 2, 3, 4, '\xd1\x81\xd0\xb2\xd0\xb5\xd1\x87\xd0\xba\xd0\xb0']

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΈ доступ ΠΊ свойствам

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… понятий ООП. ВсС значСния Π² Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠ΄ (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹) ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ общСдоступный интСрфСйс. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° доступны Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ устройствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выполняСтся Π² Python Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ соглашСния ΠΌΠ΅ΠΆΠ΄Ρƒ программистами ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ относятся ΠΊ общСдоступному интСрфСйсу класса, Π° ΠΊΠ°ΠΊΠΈΠ΅Β β€” ΠΊ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса (ΠΈΠ»ΠΈ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов модуля), ΠΎΠ΄Π½Π°ΠΊΠΎ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ всС-Ρ‚Π°ΠΊΠΈ доступСн ΠΏΠΎ этому ΠΈΠΌΠ΅Π½ΠΈ. Π”Π²Π° подчСркивания Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π°ΡŽΡ‚ нСсколько Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ пСрСстаСт Π±Ρ‹Ρ‚ΡŒ доступСн ΠΏΠΎ этому ΠΈΠΌΠ΅Π½ΠΈ. ПослСднСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ достаточно Ρ€Π΅Π΄ΠΊΠΎ. Π•ΡΡ‚ΡŒ сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (private) Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса Π² Ρ‚Π°ΠΊΠΈΡ… языках ΠΊΠ°ΠΊ C++ ΠΈΠ»ΠΈ Java: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ остаСтся доступным, Π½ΠΎ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²ΠΈΠ΄Π° _ИмяКласса__Π˜ΠΌΡΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Python Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ имя Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅Ρ€Π΅Π· экзСмпляр ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«__fΒ», Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ.

>>> class parent(object):
      def __init__(self):
          self.__f = 2
      def get(self):
          return self.__f
....
>>> class child(parent):
    def __init__(self):
        self.__f = 1
        parent.__init__(self)
    def cget(self):
        return self.__f
....
>>> c = child()
>>> c.get()
2
>>> c.cget()
1
>>> c.__dict__
{'_child__f': 1, '_parent__f': 2}  # Π½Π° самом Π΄Π΅Π»Π΅ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° "с" Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°

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

Доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ прямой:

class A(object):
    def __init__(self, x):          # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² конструкторС
        self.x = x
 
a = A(5)
print a.x
a.x = 5

Π’Π°ΠΊ ΠΈ с использованиСм свойств с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ для получСния, установки ΠΈ удалСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°:

class A(object):
    def __init__(self, x):
        self._x = x
    def getx(self):                 # ΠΌΠ΅Ρ‚ΠΎΠ΄ для получСния значСния
        return self._x
    def setx(self, value):          # присваивания Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния
        self._x = value
    def delx(self):                 # удалСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°
        del self._x                 
    x = property(getx, setx, delx, "Бвойство x")    # опрСдСляСм x ΠΊΠ°ΠΊ свойство
 
a = A(5)      
print a.x      # Бинтаксис доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΏΡ€ΠΈ этом ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ
a.x = 5

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

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° способа Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ основан Π½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² __getattr__(), __setattr__(), __delattr__(), Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉΒ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __getattribute__() . Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π­Ρ‚ΠΈ способы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ динамичСский доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто, ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². По Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС систСмы RPC для Python, имитируя ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС.

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

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

>>> class Parent(object):
        def isParOrPChild(self) : return True
        def who(self) : return 'parent'
>>> class Child(Parent):
        def who(self): return 'child'
>>> x = Parent()
>>> x.who(), x.isParOrPChild()
('parent', True)
>>> x = Child()
>>> x.who(), x.isParOrPChild()
('child', True)

Π―Π²Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π² имя класса, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ родитСля (ΠΊΠ°ΠΊ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°).

>>> class Child(Parent):
        def __init__(self):
            Parent.__init__(self)

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС для получСния класса-ΠΏΡ€Π΅Π΄ΠΊΠ° примСняСтся функция super.

class Child(Parent):
    def __init__(self):
        super(Child, self).__init__(self)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ прСдусмотрСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NotImplementedError, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

>>> class abstobj(object):
        def abstmeth(self):
            raise NotImplementedError('Method abstobj.abstmeth is pure virtual')
>>> abstobj().abstmeth()
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 2, in method
 NotImplementedError: Method abstobj.abstmeth is pure virtual

Или, с использованиСм Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊ:

>>> def abstract(func):
        def closure(*dt, **mp):
            raise NotImplementedError("Method %s is pure virtual" % func.__name__)
        return closure
>>> class abstobj(object):
        @abstract
        def abstmeth(self): pass

ИзмСняя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __class__, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ)

>>> c = child()
>>> c.val = 10
>>> c.who()
'child'
>>> c.__class__ = Parent
>>> c.who()
'parent'
>>> c.val
10

Однако, Π² этом случаС Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ прСобразования Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ, поэтому Π·Π°Π±ΠΎΡ‚Π° ΠΎ согласованности Π΄Π°Π½Π½Ρ‹Ρ… всСцСло Π»Π΅ΠΆΠΈΡ‚ Π½Π° программистС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, присваиваниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ __class__ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΈ Π±Π΅Π·. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒΡΡ Π½Π° Π΅Π³ΠΎ использованиС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ измСнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ сути шаблона проСктирования State.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² Python Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ связан с наслСдованиСм, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сигнатурно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ (signature-oriented polymorfism)[3]. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ экзСмпляру класса Β«ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΡ‚ΡŒΡΡΒ» Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π΅ΠΌΡƒ достаточно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, относящиСся ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ .read(), .readlines(), .close() ΠΈΒ Ρ‚.Β ΠΏ.).

Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ встроСнных Ρ‚ΠΈΠΏΠΎΠ²

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

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ синтаксичСской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ любой ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ класс. Для этого Π½ΡƒΠΆΠ½ΠΎ лишь Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€Β β€” ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

>>> class Add:
...      def __call__(self, x, y):    # ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, 
...          return x + y             # ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
...
>>> add = Add()
>>> add(3, 4)                         # это эквивалСнтно add.__call__(3, 4)
7

Аналогично ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ встроСнных Ρ‚ΠΈΠΏΠΎΠ². Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ связан с вычислСниСм Π΄Π»ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ len(). ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, эта встроСнная функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

>>> class wrongList(list):     # опрСдСляСм собствСнный класс для списка
...     def __len__(self):     # ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда считаСт, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ
...         return 0
...
>>> w = wrongList([1,2,3])
>>> len(w)                     # это эквивалСнтно w.__len__()
0

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ __getitem__,__setitem__,__delitem__,__contains__ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрфСйс для словаря ΠΈΠ»ΠΈ списка(dict). Достаточно просто ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ числовыС Ρ‚ΠΈΠΏΡ‹. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ *:

class Multiplyable:
    def __init__(self, value): self.value = value
    def __mul__(self, y):      return self.value * y
    def __rmul__(self, x):     return x * self.value
    def __imul__(self, y):     return Multiplyable(self.value * y)
    def __str__(self):         return "Multiplyable(%s)" % self.value
 
>>> m = Multiplyable(1)
>>> print m
Multiplyable(1)
>>> m *= 3
>>> print m
Multiplyable(3)

ПослСдний ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β β€” .__str__()Β β€” ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° прСдставлСниС экзСмпляра класса ΠΏΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ print ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаях.

АналогичныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… встроСнных Ρ‚ΠΈΠΏΠΎΠ²

>>> int.__add__
<slot wrapper '__add__' of 'int' objects>
>>> [].__getitem__
<built-in method __getitem__ of list object at 0x00DA3D28>
>>> class a(object):pass
>>> a.__call__
<method-wrapper '__call__' of type object at 0x00DDC318>

НС всС ΠΈΠ· Π½ΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° самом Π΄Π΅Π»Π΅: большая Ρ‡Π°ΡΡ‚ΡŒ имитируСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python для удобства программиста. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΏΡ€ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… опСрациях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слоТСниС Ρ†Π΅Π»Ρ‹Ρ… Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ поиску ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __add__ Ρƒ класса int) ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСвозмоТности измСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρƒ встроСнных классов.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами

НаслСдованиС ΠΈ мноТСствСнноС наслСдованиС

ΠŸΡ€ΠΈ описании ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, Π² ΠΊΠΎΡ€Π½Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Π° Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ классы (подклассы) Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ свои Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, уточняя ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ класса (надкласса). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ построСния классификации являСтся ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Β«IS-AΒ» (Β«Π΅ΡΡ‚ΡŒΒ»Β β€” ΠΌΠ΅ΠΆΠ΄Ρƒ экзСмпляром ΠΈ классом) ΠΈ Β«AKOΒ» (Β«a kind of» — Β«Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΒ»Β β€” ΠΌΠ΅ΠΆΠ΄Ρƒ классом ΠΈ супСрклассом)[4].

Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ наслСдованиС, Ρ‚Π°ΠΊ ΠΈ мноТСствСнноС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ классу Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ любого количСства Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов.

>>> class Par1(object):                # наслСдуСм ΠΎΠ΄ΠΈΠ½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс - object
        def name1(self): return 'Par1'
>>> class Par2(object):
        def name2(self): return 'Par2'
>>> class Child(Par1, Par2):           # создадим класс, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Par1, Par2 (ΠΈ, опосрСдованно, object)
        pass
>>> x = Child()
>>> x.name1(), x.name2()               # экзСмпляру Child доступны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· Par1 ΠΈ Par2
'Par1','Par2'

Π’ Python (ΠΈΠ·-Π·Π° Β«ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈΒ») отсутствиС наслСдования Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый интСрфСйс.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Π² Python примСняСтся Π² основном для добавлСния примСсСй (mixins)Β β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… классов, вносящих Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ повСдСния ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ свойств[5].

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ доступа ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ полям

Π—Π° достаточно простым Π² использовании ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ Π² Python кроСтся довольно слоТный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ запроса object.field (поиск прСкращаСтся послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ шага, ΠΈΠ½Π°Ρ‡Π΅ происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ).

  1. Если Ρƒ object Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __getattribute__, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΎΠ½ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 'field' (Π»ΠΈΠ±ΠΎ __setattr__ ΠΈΠ»ΠΈ __delattr__ Π² зависимости ΠΎΡ‚ дСйствия Π½Π°Π΄ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ)
  2. Если Ρƒ object Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ __dict__, Ρ‚ΠΎ ищСтся object.__dict__['field']
  3. Если Ρƒ object.__class__ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ __slots__, Ρ‚ΠΎ 'field' ищСтся Π² object.__class__.__slots__
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ object.__class__.__dict__['fields']
  5. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ рСкурсивный поиск ΠΏΠΎ __dict__ всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов (ΠΏΡ€ΠΈ мноТСствСнном наслСдовании поиск производится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ deep-first, Π² Ρ‚ΠΎΠΌ порядкС ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы пСрСчислСны Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°). Алгоритм поиска Ρ€Π°Π·Π½Ρ‹ΠΉ для «классичСских» ΠΈ Β«Π½ΠΎΠ²Ρ‹Ρ…Β» классов.
  6. Если Ρƒ object Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __getattr__, Ρ‚ΠΎ вызываСтся ΠΎΠ½ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 'field'
  7. ВозбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ AttributeError .

Если поиск ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ провСряСтся, являСтся Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ классом Β«Π½ΠΎΠ²ΠΎΠ³ΠΎ стиля». Если являСтся, Ρ‚ΠΎ провСряСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __get__ (Π»ΠΈΠ±ΠΎ __set__ ΠΈΠ»ΠΈ __delete__, Π² зависимости ΠΎΡ‚ дСйствия Π½Π°Π΄ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ), Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² object.field.__get__(object) ΠΈ возвращаСтся Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (Ρ‚Π°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ называСтся Π² Python Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ со связанным ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ (binded behavior) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для создания свойств[6]).

Π­Ρ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ распространяСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. БистСмныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ __dict__, __len__, __add__ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ поля Π² Π‘-структурС описания класса находятся сразу.

«НовыС» ΠΈ «классичСскиС» классы

Π’ вСрсиях Π΄ΠΎ 2.2 Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ возмоТности Python Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. НапримСр, Π±Ρ‹Π»ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС классы ΠΈ классы ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Бвойства (property) Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΠ»ΠΈΡΡŒ явно. Начиная с вСрсии 2.2, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ систСма Python Π±Ρ‹Π»Π° сущСствСнно ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π°. Однако для совмСстимости со старыми вСрсиями Python Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ: «классичСскиС» Ρ‚ΠΈΠΏΡ‹ (ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимыС со старым ΠΊΠΎΠ΄ΠΎΠΌ) ΠΈ Β«Π½ΠΎΠ²Ρ‹Π΅Β»[7]. Π’ вСрсии Python3000 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° «старых» классов Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π°.
Для построСния Β«Π½ΠΎΠ²ΠΎΠ³ΠΎΒ» класса достаточно ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Β«Π½ΠΎΠ²ΠΎΠ³ΠΎΒ». Если Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ «чистый» класс, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ objectΒ β€” Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для всСх Β«Π½ΠΎΠ²Ρ‹Ρ…Β» классов.

class OldStyleClass: pass          # класс "старого" Ρ‚ΠΈΠΏΠ°
class NewStyleClass(object): pass  # ΠΈ "Π½ΠΎΠ²ΠΎΠ³ΠΎ"

ВсС стандартныС классы — классы Β«Π½ΠΎΠ²ΠΎΠ³ΠΎΒ» Ρ‚ΠΈΠΏΠ°.[8]

АгрСгация. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

АгрСгация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Β«HAS-AΒ» (Β«ΠΈΠΌΠ΅Π΅Ρ‚Β»), рСализуСтся Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ссылок. Python ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько встроСнных Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²: список, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, мноТСство. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнныС классы ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² со своСй Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ доступа ΠΊ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. (Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Python Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ ассоциации, Ρ‚Π°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° Π² памяти ΠΈ, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, врСмя ΠΆΠΈΠ·Π½ΠΈ элСмСнта ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс ΠΈΠ· модуля utils.py срСды web.py являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°-словаря, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ доступа ΠΊ значСниям ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ синтаксиса доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ:

 class Storage(dict):
    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError, k:
            raise AttributeError, k
 
    def __setattr__(self, key, value):
        self[key] = value
 
    def __delattr__(self, key):
        try:
            del self[key]
        except KeyError, k:
            raise AttributeError, k
 
    def __repr__(self):
      return '<Storage ' + dict.__repr__(self) + '>'

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

>>> v = Storage(a=5)
>>> v.a
5
>>> v['a']
5
>>> v.a = 12
>>> v['a']
12
>>> del v.a

Для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:

>>> cont = dict(a=1, b=2, c=3)
>>> for k in cont:
...     print k, cont[k]
...
a 1
c 3
b 2

Ассоциация ΠΈ слабыС ссылки

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ использования (Β«USE-AΒ») экзСмпляров ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ являСтся достаточно ΠΎΠ±Ρ‰ΠΈΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ использовании ΠΎΠ΄ΠΈΠ½ класс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ зависит ΠΎΡ‚ интСрфСйса Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса (хотя эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ). Если ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΎΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ содСрТит ссылку Π½Π° Π½Π΅Π³ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Π’ этом случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ цикличСскиС ссылки. Если ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° подсчСта ссылок. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² занимаСтся сборщик мусора.

ΠΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π΅Π· присущих ссылкам ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слабых ссылок. Π‘Π»Π°Π±Ρ‹Π΅ ссылки Π½Π΅ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со слабыми ссылками примСняСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ weakref.

ΠœΠ΅Ρ‚Π°ΠΊΠ»Π°ΡΡΡ‹

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

ΠŸΡ€ΠΈ объявлСнии мСтакласса Π·Π° основу ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ класс type. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

# описаниС мСтакласса
class myobject(type):
    # нСбольшоС Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выдСлСния памяти для класса
    def __new__(cls, name, bases, dict):
        print "NEW", cls.__name__, name, bases, dict
        return type.__new__(cls, name, bases, dict)
    # нСбольшоС Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса
    def __init__(cls, name, bases, dict):
        print "INIT", cls.__name__, name, bases, dict
        return super(myobject, cls).__init__(name, bases, dict)
# ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ класса Π½Π° основС мСтакласса (замСняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ class)
MyObject = myobject("MyObject", (), {})
# ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ наслСдованиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса ΠΈΠ· Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ
class MySubObject(MyObject):
    def __init__(self, param):
        print param
# ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экзСмпляра класса
myobj = MySubObject("parameter")

РазумССтся, вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° print ΠΊΠΎΠ΄ мСтакласса ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ дСйствия с классами Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ систСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ограничСния) ΠΈΒ Ρ‚.Β ΠΏ.

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

ΠœΠ΅Ρ‚ΠΎΠ΄

Бинтаксис описания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ self, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° сам экзСмпляр класса (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ self являСтся соглашСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ программисты Π½Π° Python):

class MyClass(object):
    def mymethod(self, x):
        return x == self._x

БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ синтаксичСскими Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ статичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² основных языках программирования. Они Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½ΠΈ экзСмпляр (self), Π½ΠΈ класс (cls) ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. Для создания статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«Π½ΠΎΠ²Ρ‹Π΅Β» классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ staticmethod

>>> class D(object):  
       @staticmethod
       def test(x):
           return x == 0
...
>>> D.test(1)    # доступ ΠΊ статичСскому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Ρ‡Π΅Ρ€Π΅Π· класс
False
>>> f = D()
>>> f.test(0)    # ΠΈ Ρ‡Π΅Ρ€Π΅Π· экзСмпляр класса
True

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств (property).

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

ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Python Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ статичСскими ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ экзСмпляр класса, Π° статичСскиС Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π² классовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ пСрСдаСтся класс. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания классовых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· слСдствий Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Python классы Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Для создания классового (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«Π½ΠΎΠ²Ρ‹Π΅Β» классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ классовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹) ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ classmethod

>>> class A(object):  
      def __init__(self, int_val):
          self.val = int_val + 1
      @classmethod
      def fromString(cls, val):   # вмСсто self принято ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cls
          return cls(int(val))
...
>>> class B(A):pass
...
>>> x = A.fromString("1")
>>> print x.__class__.__name__
A
>>> x = B.fromString("1")
>>> print x.__class__.__name__
B

ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ достаточно часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ конструктора. ΠšΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ ΠΈ статичСскиС, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· свойства (property).

ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ сути ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ функция add() ΠΈΠ· модуля operator:

>>> import operator as op
>>> print op.add(2, 2), op.add(2.0, 2), op.add(2, 2.0), op.add(2j, 2)
4 4.0 4.0 (2+2j)

Π’ языкС Python достаточно Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹[9]. НапримСр, ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля multimethods.py (ΠΈΠ· Gnosis Utils)Β :

from multimethods import Dispatch
 
class Asteroid(object): pass
class Spaceship(object): pass
 
def asteroid_with_spaceship(a1, s1): print "A-><-S"
def asteroid_with_asteroid(a1, a2): print "A-><-A"
def spaceship_with_spaceship(s1, s2): print "S-><-S"
 
collide = Dispatch()
collide.add_rule((Asteroid, Spaceship), asteroid_with_spaceship)
collide.add_rule((Asteroid, Asteroid), asteroid_with_asteroid)
collide.add_rule((Spaceship, Spaceship), spaceship_with_spaceship)
collide.add_rule((Spaceship, Asteroid), lambda x,y: asteroid_with_spaceship(y,x))
 
a, s1, s2 = Asteroid(), Spaceship(), Spaceship()
 
collision1 = collide(a, s1)[0]
collision2 = collide(s1, s2)[0]

Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всСгда ΠΈΠΌΠ΅ΡŽΡ‚ своё прСдставлСниС Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ ΠΈΡ… врСмя ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ запусками прилоТСния ΠΈ/ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹. Одним ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (object persistence) которая достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ хранСния прСдставлСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (сСриализациСй) Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ восстановлСния (дСсСриализация).

ΠœΠΎΠ΄ΡƒΠ»ΡŒ pickle являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простым способом «консСрвирования» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Python.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСриализация ΠΈ дСсСриализация:

# сСриализация
>>> import pickle
>>> p = set([1, 2, 3, 5, 8])
>>> pickle.dumps(p)
'c__builtin__\nset\np0\n((lp1\nI8\naI1\naI2\naI3\naI5\natp2\nRp3\n.'
 
# Π΄Π΅-сСриализация
>>> import pickle
>>> p = pickle.loads('c__builtin__\nset\np0\n((lp1\nI8\naI1\naI2\naI3\naI5\natp2\nRp3\n.')
>>> print p
set([8, 1, 2, 3, 5])

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΈ сСриализации строка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° ΠΏΠΎ сСти, записана Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΏΠΎΠ·ΠΆΠ΅Β β€” ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π°. Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ своими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, поэтому для дСсСриализации трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π΅Ρ… ΠΆΠ΅ самых классов. НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ нСльзя Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… источников с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля pickle, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ практичСски Π»ΡŽΠ±Ρ‹Π΅ дСйствия Π½Π° локальной систСмС. ΠŸΡ€ΠΈ нСобходимости ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ ΠΈΠ»ΠΈ с Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ источниками ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями для сСриализации.

Π’ основС сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° стоит прСдставлСниС Π΅Π³ΠΎ состояния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β β€” это всС, Ρ‡Ρ‚ΠΎ записано Π² Π΅Π³ΠΎ полях. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сСриализациСй, прСдоставляя состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __getstate__, __setstate__ ΠΈ Π΄Ρ€.).

На стандартном для Python ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ сСриализации построСна Ρ€Π°Π±ΠΎΡ‚Π° модуля shelve (shelve(Π°Π½Π³Π». Π³Π»Π°Π³.)Β β€” ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΠΊΡƒ; ΡΠ΄Π°Π²Π°Ρ‚ΡŒ Π² Π°Ρ€Ρ…ΠΈΠ²). ΠœΠΎΠ΄ΡƒΠ»ΡŒ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ, Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅:

>>> import shelve
>>> s = shelve.open("myshelve.bin")
>>> s['abc'] = [1, 2, 3]
>>> s.close()
# .....
>>> s = shelve.open("myshelve.bin")
>>> s['abc']
[1, 2, 3]

БСриализация pickleΒ β€” Π½Π΅ СдинствСнная возмоТная, ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ всСгда. Для сСриализации, нСзависимой ΠΎΡ‚ языка программирования, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, XML.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

  • David M. Beazley Python Essential Reference.Β β€” 4th Edition.Β β€” Addison-Wesley Professional, 2009.Β β€” 717 с.Β β€” ISBN 978-0672329784

Бсылки

Python | ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ПослСднСС обновлСниС: 06.07.2018

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

Класс являСтся шаблоном ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ описаниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдставляСт экзСмпляр этого класса, Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅. МоТно провСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ аналогию: Ρƒ всСх Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ΅ — Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Π²ΡƒΡ… Ρ€ΡƒΠΊ, Π΄Π²ΡƒΡ… Π½ΠΎΠ³, Π³ΠΎΠ»ΠΎΠ²Ρ‹, ΠΏΠΈΡ‰Π΅Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½Π΅Ρ€Π²Π½ΠΎΠΉ систСмы, Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ·Π³Π° ΠΈ Ρ‚.Π΄. Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ шаблон — этот шаблон ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ классом. РСально ΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ (фактичСски экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса) являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ этого класса.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠΎΠ΄Π° класс ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ класса. А ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ — ΠΎΠ½ΠΈ хранят состояниС класса

Класс опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class:


class названиС_класса:
    ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹_класса

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:


Π½Π°Π·Π²Π°Π½ΠΈΠ΅_ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° = Π½Π°Π·Π²Π°Π½ΠΈΠ΅_класса([ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹])

НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ класс Person, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°:


class Person:
    name = "Tom"

    def display_info(self):
        print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚", self.name)

person1 = Person()
person1.display_info()         # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom

person2 = Person()
person2.name = "Sam"
person2.display_info()         # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Sam

Класс Person опрСдСляСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ имя Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ display_info, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выводится информация ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ΅.

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

ПослС опрСдСлСния класс Person создаСм ΠΏΠ°Ρ€Ρƒ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² — person1 ΠΈ person2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ display_info(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку Π½Π° консоль, ΠΈ Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ измСняСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° display_info Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° self.

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

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструктор. Π’Π°ΠΊ, Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создавали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Person, ΠΌΡ‹ использовали конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСявно ΠΈΠΌΠ΅ΡŽΡ‚ всС классы:


person1 = Person()
person2 = Person()

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


class Person:

    # конструктор
    def __init__(self, name):
        self.name = name  # устанавливаСм имя

    def display_info(self):
        print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚", self.name)


person1 = Person("Tom")
person1.display_info()         # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom
person2 = Person("Sam")
person2.display_info()         # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Sam

Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктор Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — self. НСрСдко Π² конструкторах ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса. Π’Π°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² конструктор пСрСдаСтся имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устанавливаСтся для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° self.name. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² классС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ name, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии класса Person. Установка значСния self.name = name ΡƒΠΆΠ΅ нСявно создаСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name.


person1 = Person("Tom")
person2 = Person("Sam")

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:


ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Sam

ДСструктор

ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ del для удалСния Π΅Π³ΠΎ ΠΈΠ· памяти:


person1 = Person("Tom")
del person1		# ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· памяти
# person1.display_info()  # Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ person1 ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· памяти

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ это Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ послС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ автоматичСски ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· памяти.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² классС дСструктор, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __del__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° del, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ автоматичСском ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр:


class Person:
    # конструктор
    def __init__(self, name):
        self.name = name  # устанавливаСм имя

    def __del__(self):
        print(self.name,"ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· памяти")
    def display_info(self):
        print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚", self.name)


person1 = Person("Tom")
person1.display_info()  # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom
del person1     # ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· памяти
person2 = Person("Sam")
person2.display_info()  # ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Sam

ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:


ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom
Tom ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· памяти
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Sam
Sam ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· памяти

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ классов Π² модулях ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, классы Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… модулях ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΆΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² основой скрипт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°: Ρ„Π°ΠΉΠ» main.py (основной скрипт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) ΠΈ classes.py (скрипт с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ классов).

Π’ Ρ„Π°ΠΉΠ»Π΅ classes.py ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° класса:


class Person:

    # конструктор
    def __init__(self, name):
        self.name = name  # устанавливаСм имя

    def display_info(self):
        print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚", self.name)


class Auto:
    def __init__(self, name):
        self.name = name

    def move(self, speed):
        print(self.name, "Π΅Π΄Π΅Ρ‚ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ", speed, "ΠΊΠΌ/Ρ‡")

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ классу Person здСсь Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ класс Auto, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ move ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ эти классы ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΡ… Π² скриптС main.py:


from classes import Person, Auto

tom = Person("Tom")
tom.display_info()

bmw = Auto("BMW")
bmw.move(65)

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ классов происходит Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· модуля. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСсь ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:


import classes

Π›ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:


ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Tom
BMW Π΅Π΄Π΅Ρ‚ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 65 ΠΊΠΌ/Ρ‡

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠžΠ±Ρ‰Π΅Π΅ прСдставлСниС β€” ΠŸΠΈΡ‚ΠΎΡˆΠΊΠ°


Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ написано ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² python.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) β€” ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основными концСпциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ понятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ классов.

Класс β€” Ρ‚ΠΈΠΏ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ устройство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚ β€” это экзСмпляр класса. Класс ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΎΠΌ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Python соотвСтствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’ python всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ β€” ΠΈ строки, ΠΈ списки, ΠΈ словари, ΠΈ всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅.

Но возмоТности ООП Π² python этим Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (класс), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Π½Ρ‘ΠΌ свои ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π­Ρ‚ΠΎ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ β€” ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ встроСнными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Однако ООП ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ долгосрочной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСсколькими людьми, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ собствСнно ΠΊ написанию своих классов Π½Π° python. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнный класс:

>>> # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ самого ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ класса
... class A:
...     pass

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько экзСмпляров этого класса:

>>> a = A()
>>> b = A()
>>> a.arg = 1  # Ρƒ экзСмпляра a появился Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg, Ρ€Π°Π²Π½Ρ‹ΠΉ 1
>>> b.arg = 2  # Π° Ρƒ экзСмпляра b - Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg, Ρ€Π°Π²Π½Ρ‹ΠΉ 2
>>> print(a.arg)
1

ΠšΠ»Π°ΡΡΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ собствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

>>> class A:
...     def g(self): # self - ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, содСрТащий Π² сСбС экзСмпляр
...                  # класса, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°,
...                  # поэтому этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ
...                  # Π²ΠΎ всСх ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса.
...         return 'hello world'
...
>>> a = A()
>>> a.g()
'hello world'

И напослСдок Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> class B:
...     arg = 'Python' # ВсС экзСмпляры этого класса Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ arg,
...                    # Ρ€Π°Π²Π½Ρ‹ΠΉ "Python"
...                    # Но впослСдствии ΠΌΡ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
...     def g(self):
...         return self.arg
...
>>> b = B()
>>> b.g()
'Python'
>>> B.g(b)
'Python'
>>> b.arg = 'spam'
>>> b.g()
'spam'

Как устроСно ООП Π² Python? Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — это инкапсуляция ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ свои ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ классов. ΠšΠ»Π°ΡΡΡ‹ ΠΏΠΎ сути ΡΠ²Π»ΡΡŽΡ‚ΡΡ шаблоном для создания Π²Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΡ‡Π΅Π½ΡŒ простой класс Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

ΠœΡ‹ объясним, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ это Β«selfΒ» Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ класс (шаблон), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная Β«myobjectxΒ» содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Β«MyClassΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² классС Β«MyClassΒ».

Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ вновь созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° «myobjectx», Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

myobjectx.variable

Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΈΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ строка «blah»:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

print(myobjectx.variable)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса (с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ функциями). Однако ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит нСзависимыС ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² классС. НапримСр, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с классом Β«MyClassΒ», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()
myobjecty = MyClass()

myobjecty.variable = "yackity"

# Then print out both values
print(myobjectx.variable)
print(myobjecty.variable)

Доступ ΠΊ функциям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Для доступа ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ доступу ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

class MyClass:
    variable = "blah"

    def function(self):
        print("This is a message inside the class.")

myobjectx = MyClass()

myobjectx.function()

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Β«Π­Ρ‚ΠΎ сообщСниС Π²Π½ΡƒΡ‚Ρ€ΠΈ класса»

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅

Π£ нас Π΅ΡΡ‚ΡŒ класс, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ для транспортных срСдств. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄Π²Π° Π½ΠΎΠ²Ρ‹Ρ… автомобиля с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ car1 ΠΈ car2. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ car1 красным ΠΊΠ°Π±Ρ€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠΌ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ 60 000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША с ΠΈΠΌΠ΅Π½Π΅ΠΌ Fer, Π° car2 — синий Ρ„ΡƒΡ€Π³ΠΎΠ½ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Jump ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ 10 000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША.

# define the Vehicle class class Vehicle: name = "" kind = "car" color = "" value = 100.00 def description(self): desc_str = "%s is a %s %s worth $%.2f." % (self.name, self.color, self.kind, self.value) return desc_str # your code goes here # test code print(car1.description()) print(car2.description()) # define the Vehicle class class Vehicle: name = "" kind = "car" color = "" value = 100.00 def description(self): desc_str = "%s is a %s %s worth $%.2f." % (self.name, self.color, self.kind, self.value) return desc_str # your code goes here car1 = Vehicle() car1.name = "Fer" car1.color = "red" car1.kind = "convertible" car1.value = 60000.00 car2 = Vehicle() car2.name = "Jump" car2.color = "blue" car2.kind = "van" car2.value = 10000.00 # test code print(car1.description()) print(car2.description()) #test_output_contains('Fer is a red convertible worth $60000.00.') #test_output_contains('Jump is a blue van worth $10000.00.') success_msg("Great job!")

8 совСтов ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Python | Π°Π²Ρ‚ΠΎΡ€: MichaΕ‚ Oleszak

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ классы Python ΠΏΡƒΠ»Π΅Π½Π΅ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

Π€ΠΎΡ‚ΠΎ Π”ΠΆΡƒΠ»ΠΈΠ°Π½Π° Майлза Π½Π° Unsplash. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ»ΠΎΡ…ΠΎ спроСктированы ΠΈ Ρ€ΡƒΡ…Π½ΡƒΠ»ΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ООП - популярная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° кодирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сдСлала Π΅Π³ΠΎ популярным Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π² Ρ‚Π°ΠΊΠΈΡ… областях, ΠΊΠ°ΠΊ Π½Π°ΡƒΠΊΠ° ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ машинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅.Однако сущСствуСт огромная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ написаниСм качСствСнного ΠΊΠΎΠ΄Π°, Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ прСимущСства ООП-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° восСмь шагов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΡƒΠ»Π΅Π½Π΅ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ классам Python:

  1. Π—Π°Π΄Π°ΠΉΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² конструкторС.
  2. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ уровня класса ΠΈ уровня экзСмпляра.
  3. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎ.
  4. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ строковоС прСдставлСниС.
  5. Π—Π½Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ статичСскоС.
  6. Π Π΅ΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π° Ρ‡Ρ‚ΠΎ частным.
  7. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ.
  8. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

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

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

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ = состояниС (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹) + ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹)

Π’ Python ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ своими схСмами, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ классами . Атрибуты класса прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Python, Π° Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½Ρ‹ Π² функциях Python. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½ΠΎΠ³ΠΎ класса, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ банковский счСт.

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

 Michal 700 

Однако этот ΠΊΠΎΠ΄ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ написан, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ всС восСмь шагов ΠΊ ΠΏΡƒΠ»Π΅Π½Π΅ΠΏΡ€ΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ классам. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· строя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ! Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· восьми шагов ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

# 1: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² конструкторС

Π’ нашСм классС BankAccount Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для установки Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²: Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ для сСбя ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись, я сначала создал ΠΏΡƒΡΡ‚ΡƒΡŽ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись, Π° Π·Π°Ρ‚Π΅ΠΌ использовал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ set_owner () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ΅ имя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ owner .Π­Ρ‚ΠΎ Π½Π΅ идСально ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π±Π΅Π· остатка. Как Π±Ρ‹ ΠΌΡ‹ Ρ‚ΠΎΠ³Π΄Π° Π²Π»ΠΎΠΆΠΈΠ»ΠΈ дСньги? Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах. Если Π±Ρ‹ Π² этом классС Π±Ρ‹Π»ΠΎ большС ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ.

Π—Π°Π΄Π°ΠΉΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² конструкторС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ рСкомСндуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π·Π°Π΄Π°Π² для Π½ΠΈΡ… значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ всСгда сущСствовали.Python ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это: конструктор __init __ () . Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² класс Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ автоматичСски послС создания экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ мСстом для налоТСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС Π½ΠΎΠ²ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи со слишком ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ балансом. Пока ΠΌΡ‹ занимаСмся этим, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ пригодятся ΠΏΠΎΠ·ΠΆΠ΅: Π½ΠΎΠΌΠ΅Ρ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΈ Π΄Π°Ρ‚Ρƒ создания.

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

 Michal 123 0 

# 2: Π Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ уровня класса ΠΈ уровня экзСмпляра

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

Π”Π°Π½Π½Ρ‹Π΅ уровня экзСмпляра Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π΅ класса Π² Ρ†Π΅Π»ΠΎΠΌ.Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… уровня класса.

НачнСм с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ owner , account_number , created_at ΠΈΠ»ΠΈ balance , ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ уровня экзСмпляра, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи. Однако ΠΏΠΎΡ€ΠΎΠ³ баланса -10 000, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ сравниваСм баланс вновь созданной ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, являСтся ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ класса: сущСствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΠΈ ΠΎΠ΄Π½Π° учСтная запись Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создана с Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌ балансом. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ТСстко Π΅Π³ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π² самом ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‡Π΅Ρ€Π΅Π· self. ΠΏΠΎΠ·ΠΆΠ΅.

Π§Ρ‚ΠΎ касаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², deposit () ΠΈ remove () Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π½ΠΎ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ уровня экзСмпляра. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π½ΡƒΠΆΠ΅Π½ экзСмпляр, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π΅ дСньги. Π­Ρ‚ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ self , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². self ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ экзСмпляр, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вносим Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ ΠΈΠ»ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ снимаСм срСдства.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ уровня класса ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»Ρ‹ csv.

Π’ Python ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ cls , Π° Π½Π΅ self , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для сущСствования ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ экзСмпляр. Π˜Ρ… популярный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования - фактичСски ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников. Нам ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт экзСмпляр BankAccount ΠΈΠ· Ρ„Π°ΠΉΠ»Π° CSV с ΠΈΠΌΠ΅Π½Π΅ΠΌ testfile.csv , содСрТащий Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ счСта Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ запятыми: Michal, 123 . Для этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ from_csv () . ΠœΡ‹ ΡƒΠΊΡ€Π°ΡˆΠ°Π΅ΠΌ Π΅Π³ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ @classmethod ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ссылку Π½Π° класс cls Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ return, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» экзСмпляр класса Π½Π° основС содСрТимого Ρ„Π°ΠΉΠ»Π° CSV. Π’ΠΎΡ‚ наш ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ класс BankAccount:

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ from_csv :

 Michal 123 0 

# 3: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½ΠΎ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄ достойного качСства! ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π½Π° самом Π΄Π΅Π»Π΅.Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ создадим Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ΠΈ сравним ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства?

 Π›ΠΎΠΆΡŒ 

Π£ Π΄Π²ΡƒΡ… ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π²Π»Π°Π΄Π΅Π»Π΅Ρ†, Π½ΠΎΠΌΠ΅Ρ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΈ Π΄Π°Ρ‚Π° создания, Π½ΠΎ всС ΠΆΠ΅ сравнСниС ΠΈΡ… с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ равСнства Π΄Π°Π΅Ρ‚ Π›ΠΎΠΆΡŒ . ΠŸΠΎΡ‡Π΅ΠΌΡƒ это?

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

ΠŸΡ€ΠΈ сравнСнии Π΄Π²ΡƒΡ… экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Python смотрит Π½Π° Π±Π»ΠΎΠΊΠΈ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ сравнСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ равСнство явно.

Однако Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Π»ΠΈΡΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ __eq __ () . Когда ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, ΠΎΠ½ автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° экзСмпляры класса ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° == . Π­Ρ‚Π° функция равСнства ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… self ΠΈ other , ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ True , ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ, ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи Π±Ρ‹Π»ΠΈ Ρ€Π°Π²Π½Ρ‹, Ссли Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² наш класс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ большим, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ( __gt __ ( ) ), мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ( __le __ () ) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

# 4: ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строковоС прСдставлСниС

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ банковский счСт, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ выглядит.

 <__ main__.ΠžΠ±ΡŠΠ΅ΠΊΡ‚ BankAccount ΠΏΠΎ адрСсу 0x7f9ec0716a10> 

На самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? Π­Ρ‚ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ BankAccount , ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ число, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½Π° Π±Π»ΠΎΠΊ памяти, Π³Π΄Π΅ ΠΎΠ½ хранится. ВмСсто этого ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ print () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. НапримСр, ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ pandas DataFrame ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Как рСбята ΠΈΠ· ΠΏΠ°Π½Π΄ это сдСлали?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строки ΠΈ воспроизводимых прСдставлСний для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для воспроизвСдСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.Π³. для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

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

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ:

 Банковский счСт: 
Π’Π»Π°Π΄Π΅Π»Π΅Ρ† счСта: ΠœΠΈΡ…Π°Π»
НомСр счСта: 123
Π”Π°Ρ‚Π° создания: 2021-05-24
Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ баланс: 0 "BankAccount (owner = 'Michal', account_number = 123, balance = 0) "

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ строковоС прСдставлСниС банковского счСта. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, вызывая repr, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ строку, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ†Π΅Π½Π΅Π½Π° для воссоздания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии.

# 5: Π—Π½Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ статичСскоС

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ to_dash_date () , которая ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ простоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹. Он Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса. На самом Π΄Π΅Π»Π΅, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²Π½Π΅ класса, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это слуТСбная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ __str __ () для получСния ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ строкового прСдставлСния, ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса.

ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ статичСских экономит ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ статичСскими. Python позволяСт явно ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ статичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @staticmethod :

Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ нСсколько прСимущСств. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это избавляСт ΠΎΡ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ self , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π½Π΅ трСбуСтся доступ ΠΊ экзСмпляру класса. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ использованиС памяти (Π² этом случаС Python Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ связанный ΠΌΠ΅Ρ‚ΠΎΠ΄). НаконСц, ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠ°ΠΊ статичСских ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сразу ΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄Π°, нСзависимым ΠΎΡ‚ состояния экзСмпляра класса.

# 6: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π° Ρ‡Ρ‚ΠΎ частным

НСкоторыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² любом классС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для явного использования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ remove () ΠΈ deposit () Π² нашСм классС BankAccount . НСкоторыС, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅Ρ‚. ΠœΠ΅Ρ‚ΠΎΠ΄ to_dash_date () - это Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, вызываСмая Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ классом, Π½ΠΎ Π½Π΅ прСдназначСнная для Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ , ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ всСго Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° с подчСркивания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас Π±Ρ‹Π»ΠΎ _to_dash_date () , self._owner ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎ соглашСниС ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… само ΠΏΠΎ сСбС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ с для , Π½ΠΎ ΠΎΠ½ΠΎ позволяСт людям, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ваш ΠΊΠΎΠ΄, сразу Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ общСдоступного API, ΠΈ поэтому ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях ΠΊΠΎΠ΄Π°.

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

Π’Π΅Ρ€Ρ…Π½Π΅Π΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для имСнования Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π° Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ частныС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ доступСн Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Ρ‹Π·ΠΎΠ² my_account .__ MIN_BALANCE Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‡Ρ‚ΠΎ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ являСтся частным ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ измСнСнию. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ благодаря ΡƒΠ»ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ name mangling .Python автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ частныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° .__ privatestuff Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ._classname__privatestuff , поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ частному Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΊΠ°ΠΊ my_account._BankAccount__MIN_BALANCE . Однако Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

# 7: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ

Рассмотрим этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°:

 Банковский счСт: 
Π’Π»Π°Π΄Π΅Π»Π΅Ρ† счСта: ΠœΠΈΡ…Π°Π»
НомСр счСта: 123
Π”Π°Ρ‚Π° создания: 1900-01-01
Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ баланс: -999999

Как Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, довольно Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ создания Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ баланс Π½Π° большоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число.Напомним, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‚Π° создания устанавливаСтся автоматичСски ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΌΡ‹ Π½Π΅ смоТСм ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись со слишком ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ балансом благодаря ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π²Π²ΠΎΠ΄Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init __ () . Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ? Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Π΄Π°Ρ‚Π° создания Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π° баланс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнуто Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств ΠΈ установщиков.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свойства ΠΈ установщики, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΡ… обновлСния.

Π§Ρ‚ΠΎΠ±Ρ‹, скаТСм, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ balance доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² класс, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΡƒΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ @property ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ создании, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ.

 0 ----------------------------------------------- --------------------- 
AttributeError Traceback (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний)
Π²
2
3 ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (my_account.balance)
----> 4 my_account.balance = 100

AttributeError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚

ΠšΡ€ΡƒΡ‚ΠΎ! Π­Ρ‚ΠΎ сработаСт для Π½ΠΎΠΌΠ΅Ρ€Π° ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΈΠ»ΠΈ Π΄Π°Ρ‚Ρ‹ создания, Π½ΠΎ для баланса ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ со слишком ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ свойств. Нам Π½ΡƒΠΆΠ½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° функция Π² классС, Ρ‚Π°ΠΊΠΆΠ΅ называСмая balance ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ΅Π½Π½Π°Ρ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ @ {attribute_name} .setter , Π² Π΄Π°Π½Π½ΠΎΠΌ случаС: @balance.Π‘Π΅Ρ‚Ρ‚Π΅Ρ€ . Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ баланс Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Пока ΠΎΠ½ обновляСтся, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΊΠ°ΠΊΡƒΡŽ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ баланс Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ опускаСтся Π½ΠΈΠΆΠ΅ минимального ΠΏΠΎΡ€ΠΎΠ³Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° устанавливаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ balance , вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ установки ΠΈ запускаСтся наша ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, баланс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½ΠΈΠΆΠ΅ -10,000.

 1000 
-1000
-3000
-5000
-7000
-9000 -------------------------------- ------------------------------------
ValueError Traceback (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний)
Π²
3 для i в диапазонС (10):
4 print (my_account.balance)
----> 5 my_account.balance - = 2000

in balance (self, new_balance)
19 def balance (self, new_balance):
20 if new_balance ---> 21 ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ValueError ("Баланс Π΄ΠΎ ΠΌΠ°Π»ΠΎΠ³ΠΎ!")
22 else:
23 self._balance = new_balance

ValueError: Баланс Π΄ΠΎ ΠΌΠ°Π»ΠΎΠ³ΠΎ!

# 8: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

И послСднСС, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅: докумСнтация! Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ внСшнСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ΅ readmes, строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊ быстро.Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»Π΅Π³Ρ‡Π΅ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΏΠΎΠΊΠ° ΠΌΡ‹ обновляСм ΠΊΠΎΠ΄ прямо ΠΏΠΎΠ΄ Π½ΠΈΠΌ, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ IDE Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ нас ΠΎΠ± ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… строках Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Они Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ класса ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ?

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

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для всСх общСдоступных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ для Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ Ρƒ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ послС строки Β«defΒ».

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ общСдоступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ deposit () , remove () ΠΈ from_csv () . ЕдинствСнный Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠΌΠΈΠΌΠΎ всСх свойств, установщиков ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², - это _to_dash_date () , поэтому ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Π§Ρ‚ΠΎ касаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ частный __MIN_BALANCE , Π½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠ· Π΄ΠΎ нашСй Π½ΠΎΠ²ΠΎΠΉ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ класса.

НаконСц, Π²ΠΎΡ‚ наш класс BankAccount послС всСх Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ.

ΠšΠ»Π°ΡΡΡ‹ Python: Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ (ООП) с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°

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


ООП: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ шаблонами проСктирования. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° выполняСтся быстрСС ΠΈ дСшСвлС, с ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ качСствСнному ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Однако кривая обучСния Π±ΠΎΠ»Π΅Π΅ крутая. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слишком слоТной для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π’ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ООП Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ большС памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ большС строк ΠΊΠΎΠ΄Π°.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ основано Π½Π° ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ программирования, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для измСнСния состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Он фокусируСтся Π½Π° описании Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языков программирования: C, C ++, Java, Go, Ruby ΠΈ Python. Π­Ρ‚ΠΎ контрастируСт с Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ фокусируСтся Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π±Π΅Π· указания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ языки запросов ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ SQL ΠΈ XQuery, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщаСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ООП ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ классов. Класс ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Β«ΠΏΠ»Π°Π½Β» для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свои собствСнныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (характСристики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π² ООП

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ класса являСтся класс Dog . НС Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ собакС ΠΈΠ»ΠΈ своСй собствСнной собакС. ΠœΡ‹ описываСм, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ собака , ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠΌ. Π‘ΠΎΠ±Π°ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ имя ΠΈ возраст ; это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра.Π‘ΠΎΠ±Π°ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π°ΡΡ‚ΡŒ ; это ΠΌΠ΅Ρ‚ΠΎΠ΄.

Когда Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ собакС, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся экзСмпляром класса. Π­Ρ‚ΠΎ основной ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ основано ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ моя собака Оззи, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ классу Dog . Π•Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹: name = 'Ozzy' ΠΈ age = '2' . Π£ Ρ€Π°Π·Π½Ρ‹Ρ… собак Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

ООП в Python

Python - ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ язык программирования, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ООП.Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для опрСдСлСния класса с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. Python ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ряд прСимущСств ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Java, C ++ ΠΈΠ»ΠΈ R. Π­Ρ‚ΠΎ динамичСский язык с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… высокого уровня. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° происходит Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π½Π° Java ΠΈΠ»ΠΈ C ++. ΠžΡ‚ программиста Π½Π΅ трСбуСтся ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, Π° Π΅Π³ΠΎ ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятным.

Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Python, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с курсом DataCamp Intro to Python for Data Science.

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс Π² Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя класса ΠΈ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ класса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init__ с def . Π­Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он ΠΏΠΎΡ…ΠΎΠΆ Π½Π° конструктор Π² Java. __init__ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всСгда! Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: self , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ относится ΠΊ самому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сСйчас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово pass , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Python ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚Π΅. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ отступ!

  класс Бобака:

    def __init __ (сам):
        ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : self Π² Python эквивалСнтно , это Π² C ++ ΠΈΠ»ΠΈ Java.

Π’ этом случаС Ρƒ вас Π΅ΡΡ‚ΡŒ (Π² основном пустой) класс Dog , Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ΄ΠΈΠ½!

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ имя класса ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² Π΄Π²Π΅ скобки.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

  Оззи = Бобака ()
  

И распСчатайтС это:

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Оззи)
  
  <__ main__.Dog ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² 0x111f47278>
  

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² класс

ПослС ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ozzy становится ясно, Ρ‡Ρ‚ΠΎ это собака. Но Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π°Π΄ΠΈΠΌ классу Dog имя ΠΈ возраст, пСрСписав Π΅Π³ΠΎ:

.
  класс Бобака:

    def __init __ (я, имя, возраст):
        сСбя.name = имя
        self.age = возраст
  

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° послС self : name ΠΈ age . Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния self.name ΠΈ self.age соотвСтствСнно. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ozzy с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ возрастом:

  ozzy = Бобака ("Оззи", 2)
  

Для доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ.Π­Ρ‚ΠΎ дСлаСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.name)

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.age)
  
  Оззи
2
  

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ слоТноС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

  print (ozzy.name + "is" + str (ozzy.age) + "Π³ΠΎΠ΄ (Π»Π΅Ρ‚).")
  
  Оззи 2 Π³ΠΎΠ΄Π° (Π»Π΅Ρ‚).
  

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция str () для прСобразования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° age , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, Π² строку, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print () .

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² классС

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ класс Dog , Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ имя ΠΈ возраст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚-Ρ‚ΠΎ ΠΈ пригодятся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ класс, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ bark () . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def , Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ self .

  класс Бобака:

    def __init __ (я, имя, возраст):
        сСбя.name = имя
        self.age = возраст

    def ΠΊΠΎΡ€Π° (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«ΠΊΠΎΡ€Π° ΠΊΠΎΡ€Π°!Β»)
  

ΠœΠ΅Ρ‚ΠΎΠ΄ bark Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ с использованиСм Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ записи послС создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ozzy . ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Β«ΠΊΠΎΡ€Π°, ΠΊΠΎΡ€Π°!Β» ΠΊ экрану. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки (Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки) Π² .bark () . Они всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ этом случаС ΠΎΠ½ΠΈ пусты, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ bark () Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

  ozzy = Бобака ("Оззи", 2)

ozzy.bark ()
  
  ΠΊΠΎΡ€Π° ΠΊΠΎΡ€Π°!
  

ВспомнитС, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»ΠΈ ozzy ? ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² классС Dog с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ doginfo () . Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ создаСтС экзСмпляры Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ свойствами ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ для Π½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄.

  класс Бобака:

    def __init __ (я, имя, возраст):
        self.name = имя
        сСбя.age = возраст

    def ΠΊΠΎΡ€Π° (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«ΠΊΠΎΡ€Π° ΠΊΠΎΡ€Π°!Β»)

    def doginfo (сам):
        print (self.name + "is" + str (self.age) + "year (s) old.")
  
  ozzy = Бобака ("Оззи", 2)
skippy = Dog ("Π‘ΠΊΠΈΠΏΠΏΠΈ", 12)
filou = Π‘ΠΎΠ±Π°ΠΊΠ° ("Filou", 8)
  
  ozzy.doginfo ()
skippy.doginfo ()
filou.doginfo ()
  
  Оззи 2 Π³ΠΎΠ΄Π° (Π»Π΅Ρ‚).
Π‘ΠΊΠΈΠΏΠΏΠΈ 12 Π»Π΅Ρ‚.
Π€ΠΈΠ»Ρƒ 8 Π»Π΅Ρ‚. 

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ doginfo () для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, для ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Dog Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ собаки ΡΡ‚Π°Ρ€Π΅ΡŽΡ‚, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… возраст. Оззи Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ исполнилось 3 Π³ΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ возраст.

  ozzy.age = 3
  
  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.age)
  
  3
  

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ birthday () Π² классС Dog :

  класс Бобака:

    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст

    def ΠΊΠΎΡ€Π° (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«ΠΊΠΎΡ€Π° ΠΊΠΎΡ€Π°!Β»)

    def doginfo (сам):
        print (self.name + "is" + str (self.age) + "year (s) old.")

    def дСнь роТдСния (сам):
        self.age + = 1
  
  ozzy = Бобака ("Оззи", 2)
  
  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.возраст)
  
  2
  
  ΠΎΠ·Π·ΠΈ.дСнь роТдСния ()
  
  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.age)
  
  3
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ возраст собаки. всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρƒ Π½Π΅Π³ΠΎ дСнь роТдСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ birthday () .

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ

Π’Ρ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ Π½Π°ΡˆΠΈΡ… собак Π±Ρ‹Π» ΠΏΡ€ΠΈΡΡ‚Π΅Π»ΡŒ. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ всС собаки Ρ‚Π°ΠΊ ΠΎΠ±Ρ‰ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹.ВзглянитС Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ setBuddy () Π½ΠΈΠΆΠ΅. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ self , ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈ buddy Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ этом случаС buddy Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Dog . УстановитС для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° self.buddy Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ buddy ΠΈ для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° buddy.buddy Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ self . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠ½Ρ‹; Ρ‚Ρ‹ ΠΏΡ€ΠΈΡΡ‚Π΅Π»ΡŒ Ρ‚Π²ΠΎΠ΅Π³ΠΎ приятСля. Π’ этом случаС Π€ΠΈΠ»Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ приятСлСм Оззи, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Оззи автоматичСски становится приятСлСм Π€ΠΈΠ»Ρƒ.Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эти Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, вмСсто опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½ΠΎ это ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹ (написаниС 2 строк ΠΊΠΎΠ΄Π° вмСсто 1) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Python Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Если Π±Ρ‹ это Π±Ρ‹Π»Π° Java, это ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹.

  класс Бобака:

    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст

    def ΠΊΠΎΡ€Π° (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«ΠΊΠΎΡ€Π° ΠΊΠΎΡ€Π°!Β»)

    def doginfo (сам):
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (сам.name + "is" + str (self.age) + "Π³ΠΎΠ΄ (Π»Π΅Ρ‚)")

    def дСнь роТдСния (сам):
        self.age + = 1

    def setBuddy (я, ΠΏΡ€ΠΈΡΡ‚Π΅Π»ΡŒ):
        self.buddy = ΠΏΡ€ΠΈΡΡ‚Π΅Π»ΡŒ
        buddy.buddy = self
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Dog . Π’ этом случаС приятСлСм Оззи Π±ΡƒΠ΄Π΅Ρ‚ Π€ΠΈΠ»Ρƒ:

.
  ozzy = Бобака ("Оззи", 2)
filou = Π‘ΠΎΠ±Π°ΠΊΠ° ("Filou", 8)

ozzy.setBuddy (filou)
  

Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ приятСлС Оззи, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ :.Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° приятСля Оззи, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· - Π½Π° Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.buddy.name)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ozzy.buddy.age)
  
  Filou
8
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ для Filou.

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (filou.buddy.name)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (filou.buddy.age)
  
  Оззи
2
  

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ приятСля Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹. АргумСнт self , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся Π² doginfo () , Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π΅Π½ ozzy.ΠΏΡ€ΠΈΡΡ‚Π΅Π»ΡŒ , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ filou .

  ozzy.buddy.doginfo ()
  
  Π€ΠΈΠ»Ρƒ 8 Π»Π΅Ρ‚ (Π»Π΅Ρ‚).
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ООП Π² Python для финансов

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python, являСтся наш ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Python For Finance: Algorithmic Trading. Π’ Π½Π΅ΠΌ ΠšΠ°Ρ€Π»ΠΈΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΡ€Π³ΠΎΠ²ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ для портфСля Π°ΠΊΡ†ΠΈΠΉ. Ворговая стратСгия основана Π½Π° ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅ΠΉ срСднСй Ρ†Π΅Π½Ρ‹ Π°ΠΊΡ†ΠΈΠΈ.Если выполняСтся сигналов ['short_mavg'] [short_window:]> сигналов ['long_mavg'] [short_window:] , создаСтся сигнал. Π­Ρ‚ΠΎΡ‚ сигнал являСтся прСдсказаниСм Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ измСнСния Ρ†Π΅Π½Ρ‹ Π°ΠΊΡ†ΠΈΠΈ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ сначала выполняСтся инициализация, Π° Π·Π°Ρ‚Π΅ΠΌ вычислСниС ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ срСднСго ΠΈ гСнСрация сигнала. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, это всСго лишь ΠΎΠ΄ΠΈΠ½ большой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся сразу. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ aapl , Ρ‚ΠΈΠΊΠ΅Ρ€ Π°ΠΊΡ†ΠΈΠΉ Apple.Если Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°ΠΊΡ†ΠΈΠΈ, Π²Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄.

  # Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
short_window = 40
long_window = 100
сигналы = pd.DataFrame (индСкс = aapl.index)
сигналы ['signal'] = 0,0

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΡƒΡŽ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΏΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ
сигналы ['short_mavg'] = aapl ['Close']. Rolling (window = short_window, min_periods = 1, center = False) .mean ()

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΡƒΡŽ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΏΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ
сигналы ['long_mavg'] = aapl ['Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ'].ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ (ΠΎΠΊΠ½ΠΎ = Π΄Π»ΠΈΠ½Π½ΠΎΠ΅_ΠΎΠΊΠ½ΠΎ, min_periods = 1, center = False) .mean ()

# Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ сигналы
сигналы ['сигнал'] [short_window:] = np.where (сигналы ['short_mavg'] [short_window:]> сигналы ['long_mavg'] [short_window:], 1.0, 0.0)

# ГСнСрация Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΊΠ°Π·ΠΎΠ²
сигналы ['ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ'] = сигналы ['сигнал']. diff ()

# ВывСсти `сигналы`
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (сигналы)
  

ΠŸΡ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ сигнала.Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°ΠΊΡ†ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ generate_signals () . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ООП ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅, с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ self .

  класс MovingAverage ():

    def __init __ (self, symbol, bars, short_window, long_window):
        self.symbol = символ
        self.bars = Π±Π°Ρ€Ρ‹
        self.short_window = ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅_ΠΎΠΊΠ½ΠΎ
        self.long_window = Π΄Π»ΠΈΠ½Π½ΠΎΠ΅_ΠΎΠΊΠ½ΠΎ

    def generate_signals (сам):
        сигналы = pd.DataFrame (index = self.bars.index)
        сигналы ['signal'] = 0,0

        сигналы ['short_mavg'] = Π±Π°Ρ€Ρ‹ ['Close']. Rolling (window = self.short_window, min_periods = 1, center = False) .mean ()
        сигналы ['long_mavg'] = Π±Π°Ρ€Ρ‹ ['Close']. Rolling (window = self.long_window, min_periods = 1, center = False) .mean ()

        сигналы ['сигнал'] [self.short_window:] = np.where (сигналы ['short_mavg'] [self.short_window:]> сигналы ['long_mavg'] [self.short_window:], 1.0, 0.0)

        сигналы ['ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ'] = сигналы ['сигнал'].diff ()

        ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Π΅ сигналы
  

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

  яблоко = MovingAverage ('aapl', aapl, 40, 100)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (apple.generate_signals ())
  

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°ΠΊΡ†ΠΈΠΈ становится ΠΎΡ‡Π΅Π½ΡŒ просто. Π­Ρ‚ΠΎ просто вопрос создания экзСмпляра Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌ символом Π°ΠΊΡ†ΠΈΠΉ.

  microsoft = MovingAverage ('msft', msft, 40, 100)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (microsoft.generate_signals ())
  

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляров. Π­Ρ‚ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ пригодятся Π²Π°ΠΌ Π² вашСй Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π΅ спСциалиста ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Python, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с нашим курсом Β«ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Python для Π½Π°ΡƒΠΊΠΈ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…Β».

Π‘ ООП ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° становится большС.Π£ вас Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ классы, подклассы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, наслСдованиС, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π’Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ структурирован ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Для этого рСкомСндуСтся ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ шаблонам проСктирования. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π°Π±ΠΎΡ€ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… прСдставляСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, которая часто повторяСтся Π² ООП, ΠΈ описываСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Π­Ρ‚ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ООП ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ: ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ создания, структурныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ повСдСнчСскиС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ шаблона создания являСтся синглтон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ повСдСнчСского шаблона. ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ рСсурс для шаблонов проСктирования - oodesign.com. Если Π²Π°ΠΌ большС нравятся ΠΊΠ½ΠΈΠ³ΠΈ, я Π±Ρ‹ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π²Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования: элСмСнты ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π½Π° Python | DataCamp

ОписаниС курса

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) - это ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, которая сокращаСт врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, упрощая Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ вашСго ΠΊΠΎΠ΄Π°.ООП смСщаСт фокус с Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ дСйствий Π½Π° рассмотрСниС вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π’ этом курсС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ схСмы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Python. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ наслСдованиСм ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ, для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ΡΡŒ Π² ΠΈΠ³Ρ€Ρƒ ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ красивый, чистый ΠΈ эффСктивный ΠΊΠΎΠ΄!

  1. Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП), Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ отличаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ.Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ свои собствСнныС классы ΠΈ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ конструкторы.

  2. НаслСдованиС ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

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

  3. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ со стандартным Python

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

  4. Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ проСктирования классов

    Как Π²Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ классы для наслСдования? Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ Python частныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹? МоТно Π»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ? Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅) вопросы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ изучСния ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² проСктирования классов.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

НаписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° Python
АлСкс Π―Ρ€ΠΎΡˆ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ @ Cockroach Labs

АлСкс - ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€-программист ΠΈ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ.Π’ настоящСС врСмя ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Cockroach Labs - ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, стоящСй Π·Π° CockroachDB, - Π³Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ½Π»Π°ΠΉΠ½-Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ. Им нравятся кошки, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ дрСссировки.

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

Python OOP - ОсновноС руководство ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Python

Π’ этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Python ясно ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ для Π±ΠΎΠ»Π΅Π΅ эффСктивной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

К ΠΊΠΎΠ½Ρ†Ρƒ этого модуля Python ООП Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.И Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис Python для создания Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅

  • Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python, опрСдСляя классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
  • Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ классы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ наслСдования.
  • ΠŸΠΎΠΉΠΌΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Для ΠΊΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ этот ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ

Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Python ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ООП Π² Python, это руководство для Ρ‚Ρ‹.

Π Π°Π·Π΄Π΅Π» 1. ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

  • ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ класс ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· класса.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ __init __ () - ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструктор для класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init __ ().
  • Атрибуты экзСмпляра ΠΈ класса - ΠΏΠΎΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса.
  • ЧастныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ - ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ ΠΎ частных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… ΠΈ ​​о Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
  • Бвойства - ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @property для опрСдСлСния свойств класса.
  • БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ - ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ Π²Π°ΠΌ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ связанных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² классС.

Π Π°Π·Π΄Π΅Π» 2. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

  • ΠœΠ΅Ρ‚ΠΎΠ΄ __str__ - ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __str__ dunder для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° строкового прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ __repr__ - ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __repr__ ΠΈ основныС различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ __str__ ΠΈ __repr__.

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

  • ΠœΠ΅Ρ‚ΠΎΠ΄ __eq__ - ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ равСнства для сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ значСниям.

РаздСл 4. НаслСдованиС

  • НаслСдованиС - ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Π²Π°ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ наслСдования ΠΈ способы опрСдСлСния класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса.
  • АбстрактныС классы - ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ абстрактныС классы ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для создания схСм для Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

Π’Ρ‹ нашли это руководство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python | ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП Π² Python

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ дисциплина ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΎ всСобщСС ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².Python, вострСбованный язык программирования, Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Он занимаСтся объявлСниСм классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ основу ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ООП. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ Β«Python ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования» ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚ вас Ρ‡Π΅Ρ€Π΅Π· объявлСниС классов python, созданиС экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π½ΠΈΡ… вмСстС с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ мСтодологиями ООП.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ аспСкты:

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅? (ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП Π² Python)

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ясноС прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ oops вмСсто pop, я пСрСчислил Π½ΠΈΠΆΠ΅ различия.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² функциях-Ρ‡Π»Π΅Π½Π°Ρ…

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП)

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π­Ρ‚ΠΎ восходящий ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Нисходящий ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Access ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

'public', private ', protected'

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа

Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ бСзопасно

Π­Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΅ бСзопасно

Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ свободно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ n для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…

Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ наслСдованиС

Он Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ наслСдованиС

Π­Ρ‚ΠΎ всС ΠΎ различиях, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с Python OOP Conceots.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП Python?

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

Π’ΠΎΡ‚ ΠΈ всС ΠΎ различиях, забСгая Π²ΠΏΠ΅Ρ€Π΅Π΄, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с классами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹?

Класс - это Π½Π°Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΠ»Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?

Π§Ρ‚ΠΎ ΠΆ, ΠΎΠ½ логичСски Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° становится простым. Π― ΠΌΠΎΠ³Ρƒ привСсти Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ: ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ офис Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ «сотрудник» ΠΊΠ°ΠΊ класс ΠΈ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, связанныС с Π½ΠΈΠΌ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ 'emp_name', 'emp_age', 'emp_salary', 'emp_id', ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния кодирования, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Класс опрСдСляСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом «Класс».
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

class class1 (): // class 1 - это имя класса
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Python Π½Π΅ чувствитСлСн ΠΊ рСгистру.

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

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

Бинтаксис: obj = class1 ()

Π—Π΄Π΅ΡΡŒ obj - это Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β» class1.

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

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

 class employee ():
    def __init __ (self, name, age, id, salary): // созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
        сСбя.name = name // self - это экзСмпляр класса
        self.age = возраст
        self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
        self.id = id

emp1 = employee ("harshit", 22,1000,1234) // созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
emp2 = сотрудник ("Π°Ρ€Π΄ΠΆΡƒΠ½", 23,2000,2234)
print (emp1 .__ dict __) // РаспСчатываСт ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
 

ОбъяснСниС: 'emp1' ΠΈ 'emp2' - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, экзСмпляры ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для класса Β«employeeΒ». Π—Π΄Π΅ΡΡŒ слово (__dict__) прСдставляСт собой Β«ΡΠ»ΠΎΠ²Π°Ρ€ΡŒΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ всС значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«emp1Β» ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°).(__init__) дСйствуСт ΠΊΠ°ΠΊ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹, рСбята, Π½Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с «классами» ΠΈ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈΒ» Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с мСтодологиями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования:

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования:

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ концСпциями.

  • НаслСдованиС
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ
  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ
  • Абстракция

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ разбСрСмся с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ наслСдования.

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

Когда-Π»ΠΈΠ±ΠΎ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎΠ± этом Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ ΠΎΡ‚ родствСнников Β«Π²Ρ‹ выглядитС Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ваш ΠΎΡ‚Π΅Ρ† / ΠΌΠ°Ρ‚ΡŒΒ». ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого называСтся «наслСдованиС». Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «наслСдованиС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ характСристик ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ классу Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉΒ». Новый класс называСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ / Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом , Π° Ρ‚ΠΎΡ‚, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ, называСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ / Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом.

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠΎΠ΄Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ наслСдованиС:

ΠžΠ΄Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ наслСдованиС позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ характСристики ΠΎΡ‚ СдинствСнного Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

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

 class employee1 (): // Π­Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

class childemployee (employee1): // Π­Ρ‚ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
сСбя.id = id
emp1 = employee1 ('суровый', 22,1000)

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp1.age)
 

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

ОбъяснСниС:

  • Π― Π±Π΅Ρ€Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс ΠΈ создал конструктор (__init__), сам класс ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ('name', 'age' ΠΈ 'salary ').

  • Π‘ΠΎΠ·Π΄Π°Π½ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс childemployee, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт свойства ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, созданы экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² emp1 ΠΈ emp2 Π² соотвСтствии с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

  • НаконСц, я Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π» возраст emp1. Π§Ρ‚ΠΎ ΠΆ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡƒΡ‡Ρƒ всСго, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ вСсь ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΈΠ»ΠΈ имя, ΠΈΠ»ΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ.

ΠœΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ наслСдованиС:

ΠœΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ наслСдованиС позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΎΡ‚ нСпосрСдствСнного Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, наслСдуСт свойства ΠΎΡ‚ своСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.

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

 class employee (): // БупСркласс
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
сСбя.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
class childemployee1 (employee): // ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

class childemployee2 (childemployee1): // Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
emp1 = сотрудник ('суровый', 22,1000)
emp2 = childemployee1 ('Π°Ρ€Π΄ΠΆΡƒΠ½', 23,2000)

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp1.age)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp2.age)
 

Π’Ρ‹Ρ…ΠΎΠ΄: 22,23

ОбъяснСниС:

  • Π­Ρ‚ΠΎ ясно объяснСно Π² ΠΊΠΎΠ΄Π΅, написанном Π²Ρ‹ΡˆΠ΅. Π—Π΄Π΅ΡΡŒ я ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» супСркласс ΠΊΠ°ΠΊ сотрудник, Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΊΠ°ΠΊ childemployee1.Π’Π΅ΠΏΠ΅Ρ€ΡŒ childemployee1 дСйствуСт ΠΊΠ°ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ для childemployee2.

  • Π― создал Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° emp1 ΠΈ emp2, Π³Π΄Π΅ я ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ «имя», «возраст», Β«Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°Β» для emp1 ΠΈΠ· супСркласса «сотрудник» ΠΈ «имя», «возраст,Β« Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Β». »И« id Β»ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса« childemployee1 Β»

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ наслСдованиС:

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

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

 класс сотрудник ():
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°): // Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ наслСдованиС
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

класс childemployee1 (сотрудник):
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

класс childemployee2 (сотрудник):
def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
self.name = имя
self.age = возраст
self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
emp1 = сотрудник ('суровый', 22,1000)
emp2 = сотрудник ('Π°Ρ€Π΄ΠΆΡƒΠ½', 23,2000)

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp1.возраст)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp2.age)
 

Π’Ρ‹Ρ…ΠΎΠ΄: 22,23

ОбъяснСниС:
  • Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ясно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сущСствуСт Π΄Π²Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… класса Β«childemployee1Β» ΠΈ Β«childemployee2Β». Они Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся «слуТащий».

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ emp1 ΠΈ emp2 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ «имя», «возраст», Β«Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°Β».

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС позволяСт ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

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

 class employee1 (): // Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс
    def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
        self.name = имя
        self.age = возраст
        self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°

class employee2 (): // Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс
    def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€):
     self.name = имя
     self.age = возраст
     self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
     self.id = id

класс childemployee (сотрудник1, сотрудник2):
    def __init __ (я, имя, возраст, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€):
     self.name = имя
     self.age = возраст
     сСбя.Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
     self.id = id
emp1 = employee1 ('суровый', 22,1000)
emp2 = сотрудник2 ('Π°Ρ€Π΄ΠΆΡƒΠ½', 23,2000,1234)

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp1.age)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (emp2.id)
 

Π’Ρ‹Ρ…ΠΎΠ΄: 22,1234

ОбъяснСниС: Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я взял Π΄Π²Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… класса Β«employee1Β» ΠΈ Β«employee2Β». И Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс Β«childemployeeΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт ΠΎΠ±Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… класса, создавая экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². 'emp1' ΠΈ 'emp2' ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов.

Π Π΅Ρ‡ΡŒ шла ΠΎ наслСдовании, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Python, Π΄Π°Π²Π°ΠΉΡ‚Π΅ углубимся Π² Β«ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΒ».

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

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π±Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния
ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции:

Ρ‚Π°ΠΊΠΆΠ΅ статичСский ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Один ΠΈΠ· распространСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² - Β«ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β». ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ быстрый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅.

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

 класс employee1 ():
def имя (сам):
print ("ЖСстокоС Π΅Π³ΠΎ имя")
def Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ):
print (Β«3000 - Π΅Π³ΠΎ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°Β»)

def age (self):
print (Β«Π΅ΠΌΡƒ 22 Π³ΠΎΠ΄Π°Β»)

класс employee2 ():
def имя (сам):
print (Β«Π Π°Ρ…ΡƒΠ» - Π΅Π³ΠΎ имя»)

def Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ):
print (Β«4000 - Π΅Π³ΠΎ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°Β»)

def age (self):
print (Β«Π΅ΠΌΡƒ 23 Π³ΠΎΠ΄Π°Β»)

def func (obj): // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
obj.name ()
obj.salary ()
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π²ΠΎΠ·Ρ€Π°ΡΡ‚()

obj_emp1 = сотрудник1 ()
obj_emp2 = сотрудник2 ()

func (obj_emp1)
func (obj_emp2)
 

Π’Ρ‹Π²ΠΎΠ΄:

Π₯Π°Ρ€ΡˆΠΈΡ‚ - Π΅Π³ΠΎ имя
3000 - Π΅Π³ΠΎ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
22 - Π΅Π³ΠΎ возраст
Π Π°Ρ…ΡƒΠ» - Π΅Π³ΠΎ имя
4000 - Π΅Π³ΠΎ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
23 - Π΅Π³ΠΎ возраст

ПояснСниС:

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, я создал Π΄Π²Π° класса Β«employee1Β» ΠΈ Β«employee2Β» ΠΈ создал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Β«ΠΈΠΌΠ΅Π½ΠΈΒ», Β«Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹Β» ΠΈ «возраста» ΠΈ распСчатал ΠΈΡ… значСния, Π½Π΅ принимая ΠΈΡ… Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ я создал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Β«objΒ» ΠΈ Π²Ρ‹Π·Π²Π°Π» всС Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «имя», «возраст» ΠΈ Β«Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°Β».

  • ПозТС Π±Ρ‹Π»ΠΈ созданы экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² emp_1 ΠΈ emp_2 для Π΄Π²ΡƒΡ… классов ΠΈ просто Π²Ρ‹Π·Π²Π°Π½Π° функция. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ называСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт классу ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²ΠΎ врСмя выполнСния:

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²ΠΎ врСмя выполнСния Ρ‚Π°ΠΊΠΆΠ΅ называСтся динамичСским ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ, Π³Π΄Π΅ ΠΎΠ½ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²ΠΎ врСмя выполнСния.Одним ΠΈΠ· распространСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния являСтся Β«ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β». ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания.

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

 класс сотрудник ():
   def __init __ (я, имя, возраст, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°):
       self.name = имя
       self.age = возраст
       self.salary = Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
       self.id = id
def Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ):
        ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

класс childemployee1 (сотрудник):

   def Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (self): // ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния
      print ("Π΄Π΅Π½Π΅Π³ Π½Π΅Ρ‚")

класс childemployee2 (сотрудник):

   def Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ):
       print ("Π΅ΡΡ‚ΡŒ дСньги")

c = childemployee1
c.Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (сотрудник)
d = childemployee2
d.earn (сотрудник)
 

Π’Ρ‹Π²ΠΎΠ΄: Π½Π΅Ρ‚ Π΄Π΅Π½Π΅Π³, Π΅ΡΡ‚ΡŒ дСньги

ОбъяснСниС: Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я создал Π΄Π²Π° класса childemployee1 ΠΈ childemployee2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса employee. Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΄Π΅Π½Π΅Π³, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π»Π°Π²Π½Ρ‹ΠΉ вопрос: ΠΊΠ°ΠΊ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ? Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ΡΡŒ, я создал ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ использовал Pass (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄).Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π² Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах, я использовал ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ использовал ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΊΠ°ΠΊ Β«Π½Π΅Ρ‚ Π΄Π΅Π½Π΅Π³Β» ΠΈ Β«ΠΈΠΌΠ΅Π΅Ρ‚ дСньги». НаконСц, создал Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²Ρ‹Π·Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Python, я расскаТу ΠΎΠ± инкапсуляции.

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

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

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания.

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

 классный сотрудник (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚):
def __init __ (сам):
self.name = 1234
self._age = 1234
self .__ salary = 1234

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1 = сотрудник ()
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (object1.name)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1._age)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1 .__ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°)
 

Π’Ρ‹Π²ΠΎΠ΄:

1234
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдним):
1234
Π€Π°ΠΉΠ» Β«C: /Users/Harshit_Kant/PycharmProjects/test1/venv/encapsu.pyΒ», строка 10, Π²
print (object1.__salary)
AttributeError: ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Β«employeeΒ» Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Β«__salaryΒ»

Explanation: Π’Ρ‹ ​​получитС этот вопрос, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ошибка? Ну, класс python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ частныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ (__ salary), ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ.

Π˜Ρ‚Π°ΠΊ, Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я использовал ΠΌΠ΅Ρ‚ΠΎΠ΄ установки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт косвСнный доступ ΠΊ Π½ΠΈΠΌ.

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

 класс сотрудник ():
def __init __ (сам):
self .__ maxearn = 1000000
def Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ (ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ):
print ("Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ: {}".Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (self .__ maxearn))

def setmaxearn (self, Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ): // ΠΌΠ΅Ρ‚ΠΎΠ΄ установки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для доступа ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ классу
self .__ maxearn = Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ

emp1 = сотрудник ()
emp1.earn ()

emp1 .__ maxearn = 10000
emp1.earn ()

emp1.setmaxearn (10000)
emp1.earn ()

 

Π’Ρ‹Ρ…ΠΎΠ΄:

Π΄ΠΎΡ…ΠΎΠ΄: 1000000, Π΄ΠΎΡ…ΠΎΠ΄: 1000000, Π΄ΠΎΡ…ΠΎΠ΄: 10000

ПояснСниС: ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° установки обСспСчиваСт косвСнный доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ частного класса . Π—Π΄Π΅ΡΡŒ я ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» класс сотрудника ΠΈ использовал (__maxearn), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой ΠΌΠ΅Ρ‚ΠΎΠ΄ установки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ здСсь для хранСния максимального Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сотрудника, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ установки setmaxearn (), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π½Ρƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Π­Ρ‚ΠΎ наглядный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ инкапсуляции, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ частного класса, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ установки для прСдоставлСния доступа.

Π”Π°Π»Π΅Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Python рассказываСт ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ абстракциСй.

Абстракция:

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

НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр абстрактного класса, Ρ‡Ρ‚ΠΎ просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для этого Ρ‚ΠΈΠΏΠ° класса. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для наслСдования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй.

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

 ΠΈΠ· abc import ABC, abstractmethod
класс сотрудника (ABC):
def emp_id (self, id, name, age, salary): // Абстракция
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

класс childemployee1 (сотрудник):
def emp_id (self, id):
print ("emp_id - 12345")

emp1 = childemployee1 ()
emp1.emp_id (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)

 

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ : emp_id - 12345

ОбъяснСниС: Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ классы. БоздаСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Β«childemployeeΒ», ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности абстрактного.

ЯвляСтся Π»ΠΈ Python Π½Π° 100% ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ?

Python Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ спСцификаторов доступа, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ «частный», ΠΊΠ°ΠΊ Π² java. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², связанных с Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΒ» языком программирования, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ строгой инкапсуляции.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½.

На этом ΠΌΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ нашСй ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° PythonΒ». НадСюсь, Π²Ρ‹ ознакомились со всСми концСпциями, связанными с классом Python, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ концСпциями Π² Python. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Ρ‚Ρ€Π΅Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ, ΠΈ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ своСму ΠΎΠΏΡ‹Ρ‚Ρƒ.

Π•ΡΡ‚ΡŒ вопросы? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ это Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² этого Π±Π»ΠΎΠ³Π° Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° PythonΒ», ΠΈ ΠΌΡ‹ свяТСмся с Π²Π°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ знания ΠΎ Python ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ прямо сСйчас Π½Π° наш курс обучСния Python с круглосуточной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ доступом.

Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ (ООП) Python

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - это искусство. Как ΠΈ Π² искусствС, для создания Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ€Π°Π±ΠΎΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½ Π²Ρ‹Π±ΠΎΡ€ подходящих кистСй ΠΈ красок. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π½Π°Π²Ρ‹ΠΊΠΎΠ².

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

Π­Ρ‚ΠΎ основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых популярных языков программирования.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ!

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Python

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² этот вопрос, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ вопрос: писали Π»ΠΈ Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Python, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅?

  secret_number = 20
 
Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ True:
   number = input ('Π£Π³Π°Π΄Π°ΠΉ число:')
 
   ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
       число = int (число)
   ΠšΡ€ΠΎΠΌΠ΅:
       print ('Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, это Π½Π΅ число')
       ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ
 
   Ссли число! = secret_number:
       Ссли число> secret_number:
           print (число, 'большС сСкрСтного числа')
 
       elif number  

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ позволяСт ΠΎΡ‚Π³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ простыС числа.ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ» Python ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² своСй систСмС. Он ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ выполняСт своС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Но здСсь Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ огромная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Ρ‡Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ попросили вас Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ простоС - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

«Если Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число ΠΊΡ€Π°Ρ‚Π½ΠΎ сСкрСтному числу, Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ подсказку».

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

Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ пытаСтся Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - это искусство, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… инструмСнтов для создания Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ красивого 🎨 Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Python здСсь πŸ‘‡ΠΠ°ΠΆΠΌΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π²ΠΈΡ‚

ВрСбования для изучСния Python OOP

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΌΡ‹ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ основы Python.

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

  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ: БимвольноС имя, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅).
  • АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (+), Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ (-), ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ (*), Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (/), цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (//), ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (%).
  • ВстроСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: ЧисловыС (Ρ†Π΅Π»Ρ‹Π΅ числа, числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, комплСксныС), ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (строки, списки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ), логичСскиС (True, False), словари ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹.
  • ЛогичСскиС выраТСния: ВыраТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся Π˜ΡΡ‚ΠΈΠ½Π°, ΠΈΠ»ΠΈ Π›ΠΎΠΆΡŒ.
  • Условный: ΠžΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ логичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ if / else .
  • Π¦ΠΈΠΊΠ»: ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ для ΠΈΠ»ΠΈ ΠΈ ΠΏΠ΅Ρ‚Π΅Π»ΡŒ.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Π‘Π»ΠΎΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.Π’Ρ‹ создаСтС ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова def .
  • АргумСнты: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр: сумма ([1, 2, 4])
  • Запуск сцСнария Python : ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Β«python <имя Ρ„Π°ΠΉΠ»Π°>Β».
  • ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python : ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ python ΠΈΠ»ΠΈ python3 Π² зависимости ΠΎΡ‚ вашСй систСмы.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° эти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΊΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎ ясны, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) - это ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ слоТныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° - это тСория, которая Π΄Π°Π΅Ρ‚ основу для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ООП, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΈ шаблонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π² Python - это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²) ΠΈ повСдСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²).Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΊΠ°ΠΊ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π°Ρ… Π²ΠΎΠΊΡ€ΡƒΠ³ вас. НапримСр, рассмотрим ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Ρ‹:

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π΄Π°Π½Π½Ρ‹Π΅ (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹) всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΌΠ΅Ρ‚ΠΎΠ΄) - всСгда Π³Π»Π°Π³ΠΎΠ»Π°ΠΌΠΈ.

Π­Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ являСтся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ содСрТат ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python?

ООП позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бСзопасноС ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.МногиС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эту ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ для создания своСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Django, Kivy, pandas, NumPy ΠΈ TensorFlow.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° основныС прСимущСства использования ООП Π² Python.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Python OOP

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ заставят вас Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python.

ВсС соврСмСнныС языки программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ООП

Π­Ρ‚Π° ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Π½Π΅ зависит ΠΎΡ‚ языка. Если Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ООП Π½Π° Python, Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

ВсС эти языки Π»ΠΈΠ±ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.Если Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΡ… послС Python, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ - Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ языками, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ООП позволяСт быстрСС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

БыстрСС ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ мСньшС строк ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π·Π° мСньшСС врСмя Π±Π΅Π· ΡƒΡ‰Π΅Ρ€Π±Π° для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ абстракции. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΄Π΅Π»Π°Π΅Ρ‚ ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Ρ‡ΠΈΠ²Ρ‹ΠΌ.

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

БниТаСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ абстракции Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅.

ООП ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ спагСтти Код

Π’Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для угадывания чисСл Π² Π½Π°Ρ‡Π°Π»Π΅ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ?

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

ООП Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ всю Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, избСгая, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… if’s .

ООП ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ· любой ситуации

Когда Π²Ρ‹ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ООП, Π²Ρ‹ смоТСтС Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΊΠ°ΠΊ ΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….

Π­Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ быстрой ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

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

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это самый простой способ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Python. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ список Π·Π°Π΄Π°Ρ‡, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтС ΠΈΡ… свСрху Π²Π½ΠΈΠ·.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структурированного программирования с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΊΠΎΡ„Π΅ΠΉΠ½ΠΈ.

  ΠΌΠ°Π»Ρ‹ΠΉ = 2
ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ = 5
большой = 6
 
user_budget = input ('Каков ваш Π±ΡŽΠ΄ΠΆΠ΅Ρ‚?')
 
ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
   user_budget = int (user_budget)
ΠšΡ€ΠΎΠΌΠ΅:
   print ('ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ число')
   Π²Ρ‹Ρ…ΠΎΠ΄()
 
Ссли user_budget> 0:
   Ссли user_budget> = big:
       print ('Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС большой ΠΊΠΎΡ„Π΅')
       Ссли user_budget == big:
           print ('Π“ΠΎΡ‚ΠΎΠ²ΠΎ')
       Π΅Ρ‰Π΅:
           print ('Π’Π°ΡˆΠ° сдача', user_budget - большой)
   elif user_budget == ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ:
       print ('Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΡ„Π΅')
       print ('Π“ΠΎΡ‚ΠΎΠ²ΠΎ')
   elif user_budget> = small:
       print ('Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ малСнький ΠΊΠΎΡ„Π΅')
       Ссли user_budget == small:
           print ('Π“ΠΎΡ‚ΠΎΠ²ΠΎ')
       Π΅Ρ‰Π΅:
           print ('Π’Π°ΡˆΠ° сдача', user_budget - small)
  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ дСйствуСт ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄Π°Π²Π΅Ρ† Π² ΠΊΠΎΡ„Π΅ΠΉΠ½Π΅.Он попросит вас ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚, Π° Π·Π°Ρ‚Π΅ΠΌ «продаст» Π²Π°ΠΌ самый большой ΠΊΠΎΡ„Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Он Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ шаг Π·Π° шагом, Π² зависимости ΠΎΡ‚ вашСго Π²Π²ΠΎΠ΄Π°.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. Π’ Π½Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅ΠΉΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ.
  2. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… условных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ , Ссли .
  3. Π‘ΡƒΠ΄Π΅Ρ‚ слоТно Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ.

ООП Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΎ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСх этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ описанная Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ООП.НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ этого Π΅Ρ‰Π΅ Π½Π΅ поняли. Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сравнСния структурного программирования ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

  класс ΠšΠΎΡ„Π΅:
        # ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€
        def __init __ (я, имя, Ρ†Π΅Π½Π°):
                self.name = имя
                self.price = float (Ρ†Π΅Π½Π°)
        def check_budget (self, budget):
                # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, дСйствитСлСн Π»ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚
                Ссли нС isinstance (budget, (int, float)):
                        print ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число')
                        Π²Ρ‹Ρ…ΠΎΠ΄()
                Ссли Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ <0:
                    print ('Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Ρƒ вас Π½Π΅Ρ‚ Π΄Π΅Π½Π΅Π³')
                    Π²Ρ‹Ρ…ΠΎΠ΄()
        def get_change (self, budget):
                Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° - самовывоз.Ρ†Π΅Π½Π°
        
        def sell (self, budget):
                self.check_budget (Π±ΡŽΠ΄ΠΆΠ΅Ρ‚)
                Ссли Π±ΡŽΠ΄ΠΆΠ΅Ρ‚> = self.price:
                        print (f'Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ ΠΊΠΎΡ„Π΅ {self.name} ')
                        Ссли Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ == self.price:
                                print ('Π“ΠΎΡ‚ΠΎΠ²ΠΎ')
                        Π΅Ρ‰Π΅:
                                print (f'Π’ΠΎΡ‚ вашС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ {self.get_change (budget)} $ ')

                        exit ("Бпасибо Π·Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ")
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ВсС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ прСдставляСт класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«ΠšΠΎΡ„Π΅Β». Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° - «имя» ΠΈ Β«Ρ†Π΅Π½Π°Β», ΠΈ ΠΎΠ±Π° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ являСтся Β«ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всю Π»ΠΎΠ³ΠΈΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ.

Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот класс, Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ просто объявляСм «шаблон» для ΠΊΠΎΡ„Π΅, Π° Π½Π΅ сам ΠΊΠΎΡ„Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ этот класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°:

  small = ΠšΠΎΡ„Π΅ ('МалСнький', 2)
рСгулярный = ΠšΠΎΡ„Π΅ ('ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ'; 5)
big = ΠšΠΎΡ„Π΅ ('Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ', 6)
 
ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
   user_budget = float (input ('Каков ваш Π±ΡŽΠ΄ΠΆΠ΅Ρ‚?'))
ΠΊΡ€ΠΎΠΌΠ΅ ValueError:
   exit ('ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ число')
  
для ΠΊΠΎΡ„Π΅ Π² [большой, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, малСнький]:
   ΠΊΠΎΡ„Π΅.ΠΏΡ€ΠΎΠ΄Π°Ρ‚ΡŒ (user_budget)
  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создаСм экзСмпляров, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΡ„Π΅, класса Β«ΠšΠΎΡ„Π΅Β», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈΒ» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡ„Π΅, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ смоТСт ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈ использовании ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ООП.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΈ структурного программирования:

ООП Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Π›Π΅Π³Ρ‡Π΅ Π² обслуТивании Π‘Π»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ
ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ «НС повторяйся» (Π‘Π£Π₯ΠžΠ™) ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… мСстах
НСбольшиС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… мСстах Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ объСм ΠΊΠΎΠ΄Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
Π›Π΅Π³Ρ‡Π΅ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π‘Π»ΠΎΠΆΠ½Π΅Π΅ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ
Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ кривая обучСния Π‘ΠΎΠ»Π΅Π΅ простая кривая обучСния
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сравнСния ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ:

  • Ни ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ Π½Π΅ идСальна (использованиС ООП Π² простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ).
  • Π­Ρ‚ΠΎ всСго лишь Π΄Π²Π° способа Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹; Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.
  • ООП ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π·Π°Ρ… ΠΊΠΎΠ΄Π°, Π° структурноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - Π² основном для простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ встроСнным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² Python.

ВсС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² Python

ΠžΡ‚ΠΊΡ€ΠΎΡŽ Π²Π°ΠΌ сСкрСт: Π²Ρ‹ всС врСмя использовали ООП, Π΄Π°ΠΆΠ΅ Π½Π΅ замСчая этого.

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ Π² Python Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ для всСго.

Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Python всС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Python - это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²) ΠΈ повСдСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²).

БоотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Python.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° - это Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… (символов) ΠΈ повСдСния ( Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ () , Π½ΠΈΠΆΠ½ΠΈΠΉ () ΠΈ Ρ‚. Π”.). Π’ΠΎ ΠΆΠ΅ самоС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ Ρ†Π΅Π»Ρ‹ΠΌ числам , с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, , логичСским, , спискам, ΠΈ словарям.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

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

Атрибуты - это Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ - это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ производят Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ простоС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, Π½Π°Π±Ρ€Π°Π² Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ python ΠΈΠ»ΠΈ python3 .

ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Python

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹.

  >>> kinsta = 'Kinsta, ΠŸΡ€Π΅ΠΌΠΈΡƒΠΌ хостинг WordPress'
>>> kinsta.upper ()
«КИНБВА, ΠŸΠ Π•ΠœΠ˜Π£Πœ Π’ΠžΠ Π”ΠŸΠ Π•Π‘Π‘ Π₯ΠžΠ‘Π’Π˜ΠΠ“Β»
  

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ строковый ΠΌΠ΅Ρ‚ΠΎΠ΄ upper () . Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС строки Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС. Однако это Π½Π΅ мСняСт ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

  >>> кинста
'Kinsta, ΠŸΡ€Π΅ΠΌΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ хостинг WordPress'
  

Π”Π°Π²Π°ΠΉΡ‚Π΅ углубимся Π² ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Ѐункция type () позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Β«Π’ΠΈΠΏΒ» - это класс, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

  >>> Ρ‚ΠΈΠΏ (кинста)
# класс 'str'
  

Ѐункция dir () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ kinsta .

  >>> Ρ€Π΅ΠΆ (кинста)
['__add__', '__class__', ........... 'Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ', 'zfill']
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ скрытыС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

  >>> kinsta .__ class__ # class β€˜str’ e>  

Π­Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ класс, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ kinsta . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ СдинствСнноС, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция Ρ‚ΠΈΠΏΠ° , - это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° __class__ .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, обнаруТивая всС ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ прямо Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ встроСнных Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π°Ρˆ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Python

Класс ΠΏΠΎΡ…ΠΎΠΆ Π½Π° шаблон . Он позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²Π°ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π±ΡŽΠ»Π»Π΅Ρ‚Π΅Π½ΡŒ

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° 1000%?

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ 20 000+ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π°ΡˆΡƒ Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ рассылку с инсайдСрскими совСтами ΠΏΠΎ WordPress!

ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ сСйчас

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ для Ρ„ΠΎΡ€ΠΌΠΎΡ‡ΠΊΠΈ для ΠΏΠ΅Ρ‡Π΅Π½ΡŒΡ , ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠ΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΡƒΠΊΠΈ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Π½Π΅ ΠΊΡƒΠΊΠΈ для отслСТивания) с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ характСристиками: Ρ„ΠΎΡ€ΠΌΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚. Π”.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρƒ нас экзСмпляров. ЭкзСмпляр - это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π² памяти.

экзСмпляров Π² Python

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ классы ΠΈ экзСмпляры, Π΄Π°Π²Π°ΠΉΡ‚Π΅ опрСдСлимся с Π½ΠΈΠΌΠΈ!

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс Π² Python, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π΅Π³ΠΎ имя. Π’ этом случаС Π²Ρ‹ создадитС класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Cookie .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ Python ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ соглашСниС ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… Π²Π΅Ρ€Π±Π»ΡŽΠΆΡŒΠΈΡ… ΠΈΠΌΠ΅Π½ для имСнования классов.

  класс Cookie:
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
  

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ имя ΠΈ скобки послС Π½Π΅Π³ΠΎ. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  cookie1 = Cookie ()
  

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ - Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Python! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

  ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (cookie1)
140130610977040 # Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Ρ‚ΠΈΠΏ (cookie1)
<класс '__main__.Cookie '>
  

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, этот Ρ„Π°ΠΉΠ» cookie ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² памяти, ΠΈ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ - Cookie .

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ экзСмпляром класса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ isinstance () .

  isinstance (cookie1, Cookie)
# Π˜ΡΡ‚ΠΈΠ½Π½Ρ‹ΠΉ
isinstance (cookie1, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»)
# Π›ΠΎΠΆΡŒ
isinstance ('строка', Cookie)
# Π›ΠΎΠΆΡŒ
  

ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора

ΠœΠ΅Ρ‚ΠΎΠ΄ __init __ () Ρ‚Π°ΠΊΠΆΠ΅ называСтся «конструктор.«Он называСтся Python ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создаСм экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ создаСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ класс Cookie , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² своСм конструкторС.

  класс Cookie:
# ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€
def __init __ (я, имя, Ρ„ΠΎΡ€ΠΌΠ°, Ρ„ΠΈΡˆΠΊΠΈ = 'Π¨ΠΎΠΊΠΎΠ»Π°Π΄'):
# Атрибуты экзСмпляра
self.name = имя
self.shape = shape
self.chips = Ρ„ΠΈΡˆΠΊΠΈ
  

Π’ классС Cookie ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» cookie Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ имя, Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Ρ‡ΠΈΠΏ.ПослСднюю ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Β«Π¨ΠΎΠΊΠΎΠ»Π°Π΄Β».

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, self относится ΠΊ экзСмпляру класса (самому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ).

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

  cookie2 = Cookie ()
# TypeError
  

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для сущСствования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΡƒΠΆΠ΅ установили Ρ„ΠΈΡˆΠ΅ΠΊ Π½Π° Β«Π¨ΠΎΠΊΠΎΠ»Π°Π΄.”

  cookie2 = Cookie ('ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅', 'Π—Π²Π΅Π·Π΄Π°')
  

Для доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ экзСмпляра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ.

  cookie2.name
# 'ΠŸΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π΅Π΅ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅'
cookie2.shape
# 'Π—Π²Π΅Π·Π΄Π°'
cookie2.chips
# 'Π¨ΠΎΠΊΠΎΠ»Π°Π΄'
  

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² классС Cookie Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слишком ΠΏΠΈΠΊΠ°Π½Ρ‚Π½ΠΎΠ³ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ΠΌΠ΅Ρ‚ΠΎΠ΄Π° bake () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΠΈ Π±ΠΎΠ»Π΅Π΅ интСрСсными.

  класс Cookie:
# ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€
def __init __ (я, имя, Ρ„ΠΎΡ€ΠΌΠ°, Ρ„ΠΈΡˆΠΊΠΈ = 'Π¨ΠΎΠΊΠΎΠ»Π°Π΄'):
# Атрибуты экзСмпляра
сСбя.name = имя
self.shape = shape
self.chips = Ρ„ΠΈΡˆΠΊΠΈ

# ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
def bake (self):
print (f'Π­Ρ‚ΠΎ {self.name}, запСкаСтся с Ρ„ΠΎΡ€ΠΌΠΎΠΉ {self.shape} ΠΈ Ρ„ΠΈΡˆΠΊΠ°ΠΌΠΈ {self.chips} ')
print ('НаслаТдайся ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅ΠΌ!')
  

Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

  cookie3 = Cookie ('Π—Π°ΠΏΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅', 'Π”Π΅Ρ€Π΅Π²ΠΎ')
cookie3.bake ()
# Π­Ρ‚ΠΎ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅ выпСкаСтся Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΈ шоколадной ΠΊΡ€ΠΎΡˆΠΊΠΈ.
ΠΠ°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠ΅ΠΌ!
  

Π§Π΅Ρ‚Ρ‹Ρ€Π΅ столпа ООП Π² Python

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных направлСния:

1.Абстракция

Abstraction скрываСт ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ абстракций Π² нашСй повсСднСвной ΠΆΠΈΠ·Π½ΠΈ. НапримСр, Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠΌ, Π½ΠΎ, вСроятно, Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ происходит ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

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

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

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

НаслСдованиС позволяСт Π½Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ нСсколько подклассов ΠΈΠ· ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса.

Основная Ρ†Π΅Π»ΡŒ - ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π‘Π£Π₯ΠžΠ™. Π’Ρ‹ смоТСтС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большой объСм ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² всС совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² супСрклассах .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ гСнСтичСской наслСдствСнности .ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ (подклассы) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ наслСдования ΠΌΠ΅ΠΆΠ΄Ρƒ двумя родитСлями (супСрклассами). Они Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ всС физичСскиС характСристики (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ повСдСния (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹).

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

позволяСт Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ подклассов , Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² супСрклассС .

Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Β« ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌ Β». Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаСм ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ функциями.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΠ΄Π΅Π΅, Π΄Π΅Ρ‚ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ прСкрасным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ get_hungry () , Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ³ΠΎΠ»ΠΎΠ΄Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 4 часа, Π° Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 6.

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ - это процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² классС.

Π₯отя Π² Python Π½Π΅Ρ‚ частного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ искаТСниС Π² Python.Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ , Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ , сСттСры , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим класс Human , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ _height . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ 3 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²).

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ построСния прСобразоватСля Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ

Одна ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… особСнностСй Python Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ CLI (интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки) Π΄ΠΎ слоТного Π²Π΅Π±-прилоТСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ООП, ΠΏΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ для рСдактирования ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ вСрсиями ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Git.

Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌ:

  • ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ
  • ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ
  • Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ
  • ΠšΡ€ΡƒΠ³
  • Π¨Π΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

Π€ΠΎΡ€ΠΌΠ° Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС Ρ„Π°ΠΉΠ» ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.py ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² классС.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ характСристики ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС это 2D-Ρ„ΠΎΡ€ΠΌ . Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс Shape с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ get_area () , ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ каТдая Ρ„ΠΎΡ€ΠΌΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π³Π»Π°Π³ΠΎΠ»Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ называСтся get_area () , Π° Π½Π΅ area () .

  класс Π€ΠΎΡ€ΠΌΠ°:
def __init __ (сам):
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ

def get_area (сам):
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ опрСдСляСт класс; Однако ΠΏΠΎΠΊΠ° Π² этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° этих Ρ„ΠΈΠ³ΡƒΡ€.

  класс Π€ΠΎΡ€ΠΌΠ°:
def __init __ (self, side1, side2):
self.side1 = side1
self.side2 = side2

def get_area (сам):
Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.side1 * self.сторона2

def __str __ (сам):
return f 'ΠžΠ±Π»Π°ΡΡ‚ΡŒ этого {self .__ class __.__ name__}: {self.get_area ()}'
  

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ с этим ΠΊΠΎΠ΄ΠΎΠΌ:

  • Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init__ ΠΌΡ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: side1 ΠΈ side2 . Они останутся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ экзСмпляра .
  • Ѐункция get_area () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ __str __ () являСтся Β«Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌΒ», Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ __init __ (). Он позволяСт Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ способ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ экзСмпляра.
  • Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ self .__ class __.__ name__ относится ΠΊ ΠΈΠΌΠ΅Π½ΠΈ класса. Если Π±Ρ‹ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с классом Triangle , этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±Ρ‹Π» Π±Ρ‹ Β«TriangleΒ».

Класс ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой класс Rectangle , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ класса Shape .

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

  # Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс
класс Π€ΠΎΡ€ΠΌΠ°: ...
 
class Rectangle (Shape): # БупСркласс Π² скобках
ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ
  

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ класс

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡƒ с классом Square .

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ - это просто ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ стороны Ρ€Π°Π²Π½Ρ‹.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ init , приняв Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сторону ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой стороны конструктору класса Rectangle .

  # Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
класс Π€ΠΎΡ€ΠΌΠ°: ...
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°): ...
 
класс ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):
def __init __ (я, сторона):
super () .__ init __ (сторона, сторона)
  

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, супСрфункция Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ со стороны супСрклассу .Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сторона ΠΊΠ°ΠΊ сторона1 ΠΈ сторона2 Π² Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ конструктор.

Класс Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π² Π΄Π²Π° Ρ€Π°Π·Π° мСньшС ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ изобраТСния: Ρ€Π΅ΠΏΠ΅Ρ‚ΠΈΡ‚ΠΎΡ€Ρ‹ УнивСрситСта).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ класса Rectangle ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ get_area , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ соотвСтствовал Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, которая составляСт ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ основания, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π° высоту.

  # Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
класс Π€ΠΎΡ€ΠΌΠ°: ...
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°): ...
класс ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ): ...
 
класс Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):
def __init __ (self, base, height):
super () .__ init __ (основаниС, высота)
 
def get_area (сам):
ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ = супСр (). get_area ()
Π·ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° / 2
  

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ super () - Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² супСрклассС , ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get_area () .

Класс ΠšΡ€ΡƒΠ³

ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ Ο€rΒ² , Π³Π΄Π΅ r - радиус ΠΊΡ€ΡƒΠ³Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ get_area () для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этой Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ο€ ΠΈΠ· матСматичСского модуля

  # Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
класс Π€ΠΎΡ€ΠΌΠ°: ...
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°):...
класс ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ): ...
class Triangle (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):…
 
# Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°
ΠΈΠ· матСматичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠΈ
 
класс ΠšΡ€ΡƒΠ³ (Π€ΠΎΡ€ΠΌΠ°):
def __init __ (self, radius):
self.radius = радиус
 
def get_area (сам):
return pi * (собствСнный радиус ** 2)
  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ опрСдСляСт класс Circle , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ get_area () .

Π₯отя Circle унаслСдован ΠΎΡ‚ класса Shape , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ своСму вкусу.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡˆΠ΅ΡΡ‚ΠΈΠ³Ρ€Π°Π½Π½ΠΈΠΊ класса

Нам Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»ΠΈΠ½Π° стороны ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΡˆΠ΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ. Он ΠΏΠΎΡ…ΠΎΠΆ Π½Π° класс Square , Π³Π΄Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ конструктору Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Π€ΠΎΡ€ΠΌΡƒΠ»Π° ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΡˆΠ΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ изобраТСния: BYJU’S)

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

  # Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
класс Shape:...
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°): ...
класс ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ): ...
class Triangle (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):…
class Circle (Shape):…
 
# Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ
ΠΈΠ· матСматичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° sqrt
 
класс Π¨Π΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):

def get_area (сам):
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ (3 * sqrt (3) * self.side1 ** 2) / 2
  

ВСстированиС Π½Π°ΡˆΠΈΡ… классов

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΈ запускС Ρ„Π°ΠΉΠ»Π° Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΡ‡ΠΊΠΈ останова.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π­Ρ‚Π° функция доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Python 3.7 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅.

  ΠΈΠ· math import pi, sqrt
# Π‘Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
класс Π€ΠΎΡ€ΠΌΠ°: ...
класс ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π€ΠΎΡ€ΠΌΠ°): ...
класс ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ): ...
class Triangle (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):…
class Circle (Shape):…
class Hexagon (ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ):…
 
Ρ‚ΠΎΡ‡ΠΊΠ° останова ()
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС Ρ„Π°ΠΉΠ» Python ΠΈ поэкспСримСнтируйтС с созданными Π²Π°ΠΌΠΈ классами.

  $ ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅.Ρ€Ρƒ
 
(Pdb) rec = ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (1, 2) (Pdb) print (rec)
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ этого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°: 2
(Pdb) sqr = ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (4)
(PDB) ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (sqr)
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ этой ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ: 16
(Pdb) tri = Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (2, 3)
(PDB) ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ‚Ρ€ΠΈ)
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ этого Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°: 3,0.
(Pdb) cir = ΠšΡ€ΡƒΠ³ (4)
(PDB) ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (cir)
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ этого ΠΊΡ€ΡƒΠ³Π°: 50.26548245743669.
(Pdb) hex = ΡˆΠ΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (3)
(PDB) ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ)
ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ этого ΡˆΠ΅ΡΡ‚ΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°: 23.3826859844
  

Π’Ρ‹Π·ΠΎΠ²

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run , Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ.

Когда Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Π½Π° пСрСнос Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub ΠΈΠ»ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ своС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π½Π° Python? βœ… Π’Ρ‹ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто πŸ˜„ΠΠ°ΠΆΠΌΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π²ΠΈΡ‚Π½ΡƒΡ‚ΡŒ

Π‘Π²ΠΎΠ΄ΠΊΠ°

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - это ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, думая ΠΎ Π½ΠΈΡ… ΠΊΠ°ΠΊ ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… . Если Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Python OOP, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java, PHP, Javascript ΠΈ C #.

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ:

  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π² Python
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΏΠ΅Ρ€Π΅Π΄ структурным
  • ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π½Π° Python
  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ классов ΠΈ ΠΈΡ… использованиС Π² Python
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса Π² Python
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² Python
  • Π§Π΅Ρ‚Ρ‹Ρ€Π΅ столпа ООП
  • РСализация абстракции , , наслСдования , ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»ΠΎ Π·Π° Π²Π°ΠΌΠΈ!

Π”Π°ΠΉΡ‚Π΅ Π½Π°ΠΌ Π·Π½Π°Ρ‚ΡŒ вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½ΠΈΠΆΠ΅ Π² коммСнтариях! И Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с нашим руководством ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ Python ΠΈ PHP.


Если Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта ΡΡ‚Π°Ρ‚ΡŒΡ, Ρ‚ΠΎ Π²Π°ΠΌ понравится хостинговая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Kinsta WordPress. Π£ΡΠΊΠΎΡ€ΡŒΡ‚Π΅ свой сайт ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΡ€ΡƒΠ³Π»ΠΎΡΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΡ‚ нашСй ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ WordPress. Наша инфраструктура Π½Π° Π±Π°Π·Π΅ Google Cloud ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ Π½Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² Kinsta! ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с нашими Ρ‚Π°Ρ€ΠΈΡ„Π°ΠΌΠΈ

классов Python


ΠšΠ»Π°ΡΡΡ‹ / ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python

Python - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования.

ΠŸΠΎΡ‡Ρ‚ΠΈ всС Π² Python прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со своими свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

Класс ΠΏΠΎΡ…ΠΎΠΆ Π½Π° конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Β«ΠΏΠ»Π°Π½Β» для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².


Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class :

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс MyClass со свойством x:

класс MyClass:
x = 5

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам "

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс MyClass для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ p1 ΠΈ распСчатайтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x:

p1 = MyClass ()
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (p1.Ρ…)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам "

Ѐункция __init __ ()

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΈΡ… ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… прилоТСниях.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ классов, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ встроСнный __init __ () функция.

ВсС классы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __init __ (), которая всСгда выполняСтся, ΠΊΠΎΠ³Π΄Π° занятиС инициируСтся.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __init __ () для присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся:

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Person, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __init __ () для присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° имя ΠΈ возраст:

class Person:
def __init __ (я, имя, возраст):
сСбя.name = name
self.age = age

p1 = Person ("Π”ΠΆΠΎΠ½", 36)

print (p1.name)
print (p1.age)

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам "

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ѐункция __init __ () вызываСтся автоматичСски ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.



ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… - это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС Person:

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

Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ привСтствиС, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° p1:

class Person:
def __init __ (я, имя, возраст):
сСбя.name = name
self.age = age

def myfunc (self):
print (Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚Β» + self.name)

p1 = Person (Β«Π”ΠΆΠΎΠ½Β», 36)
p1.myfunc ()

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам "

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self являСтся ссылкой Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр класса ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ этому классу.


Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self являСтся ссылкой Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр класса ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ этому классу.

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ self , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² классС:

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ слова mysillyobject ΠΈ abc вмСсто self :

class Person:
def __init __ (mysillyobject, name, age):
mysillyobject.
ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *