Π Π°Π·Π½ΠΎΠ΅

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ python: Руководство ΠΏΠΎ магичСским ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ / Π₯Π°Π±Ρ€

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

ΠšΠ»Π°ΡΡΡ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ~ PythonRu

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠΊ: ΠœΠ°ΡΡΠΈΠ²Ρ‹

Python β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования. ΠŸΠΎΡ‡Ρ‚ΠΈ всС Π² Python β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π΅Π³ΠΎ свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Класс ΠΏΠΎΡ…ΠΎΠΆ Π½Π° конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ β€˜β€˜ΠΏΡ€ΠΎΠ΅ΠΊΡ‚β€™β€™ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

БозданиС класса

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MyClass ΠΈ свойством x:

class MyClass:
    x = 5

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ myClass для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ p1, ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x:

p1 = MyClass()
print(p1.x)

Π’Ρ‹Π²ΠΎΠ΄:

5

Ѐункция init

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ β€” это классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΈΡ… ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² прилоТСниях.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ классов, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __init__.

Π£ всСх классов Π΅ΡΡ‚ΡŒ функция ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ __init__(), которая всСгда выполняСтся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __init__() для добавлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
Для создания класса ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Person, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ __init__(), Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ значСния для ΠΈΠΌΠ΅Π½ΠΈ ΠΈ возраста:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


p1 = Person("Василий",  36)    
print(p1.name)  
print(p1.age)

Π’Ρ‹Π²ΠΎΠ΄:

Василий
36

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция __init__() автоматичСски вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ использовании класса для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.
Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС Person.
Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ привСтствиС, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π΅:

class Person:
    def __init__(self, name, age):
        self.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.name = name
        mysillyobject.age = age
    
    def myfunc(abc):
        print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ "  + abc.name)


p1 = Person("Василий", 36)
p1.myfunc()

Π’Ρ‹Π²ΠΎΠ΄:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, мСня Π·ΠΎΠ²ΡƒΡ‚ Василий

ИзмСнСниС свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.
ИзмСним возраст ΠΎΡ‚ p1 Π½Π° 40:

p1.age = 40
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² примСнСния class Π² Python 3: ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с классами Π² Python

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова del

del p1.age

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово del.

del p1

Π”Π°Π»Π΅Π΅: Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Python

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Python / Π₯Π°Π±Ρ€

Π’ этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ рассматриваСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ MRO Π‘3 ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спСцифичСскиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ мноТСствСнного наслСдования. Π₯отя ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка, я Π°ΠΊΡ†Π΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» своё Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ список ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ссылок ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (method resolution order) позволяСт ΠŸΠΈΡ‚ΠΎΠ½Ρƒ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ссли ΠΎΠ½ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ нСпосрСдствСнно Π² классС-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅. Если Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€Π΅Π΄ΠΎΠΊ, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ восходящий поиск ΠΏΠΎ всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ. Если ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мноТСствСнноС наслСдованиС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ со спСцифичСскими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π½ΠΈΠΆΠ΅.

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


A     C
|     |
B     D
 \   /
   E

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ экзСмпляра класса E Ρ‚Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²Ρ‘Π» Π±Ρ‹ поиск ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² классах E, B, A, D ΠΈ C. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ поиск вёлся сначала Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ классС-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ ΠΈ Π²ΠΎ всСх Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ…, Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ классС-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ со всСми ΠΏΡ€Π΅Π΄ΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚. Π΄. Π­Ρ‚ΠΎΡ‚ способ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π» особых Π½Π°Ρ€Π΅ΠΊΠ°Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ° Ρƒ классов Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Однако, начиная с вСрсии 2.2, появился Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс object, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΎΡΡŒ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы. Π—Π°Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Π²Π²Π΅Π»ΠΈ β€” Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сущСствСнным Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ΅Ρ‚Π°-Π΄Π°Π½Π½Ρ‹Ρ…. Начиная с вСрсии 3.0, старыС классы большС Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π° всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ происходят ΠΎΡ‚ класса object.

Π­Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Β«Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры» (Β«diamond diagramΒ»).


   object
   /   \
  A     B
   \   /
     C

Если Ρƒ нас Π΅ΡΡ‚ΡŒ классы A ΠΈ B, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… наслСдуСтся класс C, Ρ‚ΠΎ ΠΏΡ€ΠΈ поискС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ старому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ (C, A, object, B) получаСтся, Ρ‡Ρ‚ΠΎ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² классах C ΠΈ A ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Ρ‘Π½ ΠΈΠ· object, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² B. Π­Ρ‚ΠΎ создаёт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ нСудобства, Ρ‚.ΠΊ. Π² object ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚ΠΈΠΏΠ° __init__, __str__ ΠΈ Ρ‚.ΠΏ. Но Π΄Π°ΠΆΠ΅ Ссли object Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс D, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° останСтся β€” ΠΌΠ΅Π½Π΅Π΅ спСцифичный ΠΌΠ΅Ρ‚ΠΎΠ΄ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ вмСсто Π±ΠΎΠ»Π΅Π΅ спСцифичного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°.

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


object
   | 
   A
   |
   B

Π’ΠΎΠ³Π΄Π° Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ для класса B Π±ΡƒΠ΄Π΅Ρ‚ список [B, A, object]. Π’.Π΅. ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ B().something() ΠΌΠ΅Ρ‚ΠΎΠ΄ сначала Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒΡΡ Π² классС B. Если ΠΎΠ½ Ρ‚Π°ΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ поиск продолТится Π² классС A. Если Π΅Π³ΠΎ Π½Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΌ, Ρ‚ΠΎ поиск Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π² классС object. ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Π² всС классы ΠΈΠ· Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ² Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠŸΠΈΡ‚ΠΎΠ½ Π²Ρ‹ΠΊΠΈΠ½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Attribute Error.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры линСаризация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΠ³ΠΎ класса C класс A слСдуСт Π·Π° классом B (ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ [C, …, B, …, A]), Ρ‚ΠΎ ΠΈ для любого Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° D класс B Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° A Π² Π΅Π³ΠΎ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ [D, …, C, …, B, …, A]). Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, старый порядок Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π΅Π½, Ρ‚.ΠΊ. Π² случаС Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры для класса A линСаризация Π΅ΡΡ‚ΡŒ [A, object], для класса B β€” [B, object], Π½ΠΎ для класса C β€” [C, A, object, B], Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ свойство монотонности ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ классу B.

Для удовлСтворСния свойству монотонности Π² этом случаС ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ Π΄Π²Π΅ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ: [C, A, B, object] ΠΈ [C, B, A, object]. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π΅ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ монотонности Π½ΠΈ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ класса A (Ρ‚.ΠΊ. object слСдуСт Π·Π° A Π² ΠΎΠ±ΠΎΠΈΡ… случаях), Π½ΠΈ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ класса B (Ρ‚.ΠΊ. object слСдуСт Π·Π° B Π² ΠΎΠ±ΠΎΠΈΡ… случаях). Π’Π°ΠΊ ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· Π½ΠΈΡ… Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ? Π’ этом случаС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ-понятный способ β€” ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса C. Если класс объявлСн ΠΊΠ°ΠΊ C(A, B), Ρ‚ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΉ B слСдуСт Π·Π° A. Если класс объявлСн ΠΊΠ°ΠΊ C(B, A), Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π²Π·ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ A слСдуСт Π·Π° B.

Π’Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ опрСдСляСтся порядком локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π° (local precedence ordering). Бвойство порядка локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ соблюдСния для классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ порядка, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ объявлСнии. НапримСр, Ссли класс объявлСн ΠΊΠ°ΠΊ D(A, B, C), Ρ‚ΠΎ Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ D класс A Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ B, Π° класс B β€” Ρ€Π°Π½ΡŒΡˆΠ΅ C.

ΠŸΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΡ‚ΠΎΠ³ΠΈ:

  • Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ класса называСтся список ΠΈΠ· самого класса ΠΈ всСх Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ) Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎ порядку слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ поиск ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
  • порядок Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (MRO) β€” это способ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ составляСтся линСаризация класса.
  • ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ β€” это свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ соблюдСния Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ порядка слСдования классов-ΠΏΡ€ΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-родитСля.
  • порядок локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π° β€” это свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ соблюдСния Π² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ порядка слСдования классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π΅Π³ΠΎ объявлСнии.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² нашСй Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ соблюдались ΠΈ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ, ΠΈ порядок локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π°.

Алгоритм порядка Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² C3.

Для достиТСния ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ†Π΅Π»Π΅ΠΉ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ C3. Он достаточно прост, ΠΎΠ΄Π½Π°ΠΊΠΎ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания Π²Π²Π΅Π΄Ρ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условныС обозначСния:
[C1, C2, … CN] – список ΠΈΠ· элСмСнтов C1, C2, … CN. БоотвСтствСнно, [Π‘] β€” список ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта C.
L[C] – линСаризация класса C. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ любая линСаризация Π΅ΡΡ‚ΡŒ список ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ.
merge(L[C1], L[C2], …, L[CN]) – объСдинСниС элСмСнтов Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΉ L[C1], L[C2], …, L[CN] Π² список с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. По сути, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ всС классы ΠΈΠ· L[C1], L[C2], …, L[CN] ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классов Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ спискС.

Алгоритм C3 прСдставляСт ΠΈΠ· сСбя Π½Π°Π±ΠΎΡ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»:

  • ЛинСаризация класса C Π΅ΡΡ‚ΡŒ одноэлСмСнтный список ΠΈΠ· самого класса C плюс объСдинСниС Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΉ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ списка всСх Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π’ условных обозначСниях это ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ L[C] = [C] + merge(L[C1], L[C2], …, L[CN], [C1, C2, …, CN]), Ссли класс C Π±Ρ‹Π» объявлСн ΠΊΠ°ΠΊ class C(C1, C2, …, CN). Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ каТдая линСаризация L[CX] начинаСтся с класса CX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ приписан Π² ΠΊΠΎΠ½Π΅Ρ† списка объСдинСния ΠΊΠ°ΠΊ нСпосрСдствСнный Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ класса C. Π—Π°Ρ‡Π΅ΠΌ это сдСлано станСт ясно Π΄Π°Π»Π΅Π΅.
  • ОбъСдинСниС Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΉ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
    1. БСрётся Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (L[C1][0]).
    2. Π­Ρ‚ΠΎΡ‚ элСмСнт ищСтся Π²ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… линСаризациях (ΠΎΡ‚ L[C2] Π΄ΠΎ L[CN]).
    3. Если этот элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π³Π΄Π΅-Ρ‚ΠΎ Π²Π½Π΅ Π½Π°Ρ‡Π°Π»Π° списка (L[CK][X] == L[C1][0], X != 0; ΠΏΠΎ сути это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ L[C1][0] являСтся Ρ‡ΡŒΠΉΠΌ-Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ), Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΡˆΠ°Π³Ρƒ, бСря Π² качСствС Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнт ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (L[C2][0]).
    4. Если элСмСнт Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, Ρ‚ΠΎ ΠΎΠ½ добавляСтся Π² ΠΊΠΎΠ½Π΅Ρ† ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ списка Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ удаляСтся ΠΈΠ· всСх рассматриваСмых списков (ΠΎΡ‚ L[C1] Π΄ΠΎ L[CN]; ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ спискС Π΄Π²Π°ΠΆΠ΄Ρ‹). Если послС удалСния элСмСнта ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ пустыС списки β€” ΠΎΠ½ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ· объСдинСния. ПослС этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ повторяСтся с самого Π½Π°Ρ‡Π°Π»Π° (ΠΎΡ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта L[C1][0]), Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ. Если Π΅Π³ΠΎ Π½Π΅Ρ‚ β€” объСдинСниС Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ.
    5. Если Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄ΠΎΡˆΡ‘Π» Π΄ΠΎ послСднСго элСмСнта L[CN], Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π½Π΅ удовлСтворяСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‚ΠΎ линСаризация Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ стал понятнСС, Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ посмотрим, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ происходит с нашСй Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структурой. Для Π½Π΅Ρ‘ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:
L[C] = [C] + merge(L[A], L[B], [A, B])
L[A] = [A] + merge(L[object], [object])
L[B] = [B] + merge(L[object], [object])
L[object] = [object] (Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ случай)

Наибольший интСрСс прСдставляСт процСсс объСдинСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Π’ случаях L[A] ΠΈ L[B] Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ merge(L[object], [object]) = merge([object], [object]) раскрываСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ списки состоят ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта object, ΠΏΠΎ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 4 ΠΏΡ€Π°Π²ΠΈΠ»Π° объСдинСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ [object].

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ L[C] = [C] + merge(L[A], L[B], [A, B]) = [C] + merge([A, object], [B, object], [A, B]). РаспишСм нашС объСдинСниС ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ C3:

  • Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ списка β€” A.
  • ΠŸΠΎΠΈΡ‰Π΅ΠΌ Π΅Π³ΠΎ Π²ΠΎ всСх ΠΏΡ€ΠΎΡ‡ΠΈΡ… списках, Ρ‚.Π΅. Π² [B, object] ΠΈ [A, B].
  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс A Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ Π² спискС [B, object], Π° Π² спискС [A, B] являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ элСмСнтом, Ρ‚ΠΎ ΠΌΡ‹ добавляСм Π΅Π³ΠΎ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ список Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ L = [] + [A] = [A]. ПослС этого класс A Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎ всСх списков Π² объСдинСнии. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ L[C] = [C] + [A] + merge([object], [B, object], [B]).
  • Π‘Π½ΠΎΠ²Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ списка β€” object.
  • ΠŸΠΎΠΈΡ‰Π΅ΠΌ Π΅Π³ΠΎ Π²ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… списках ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ object являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ (Π½Π΅ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ) элСмСнтом списка [B, object]. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, ΠΏΠΎ сути, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс object ΠΏΡ€Π΅Π΄ΠΎΠΊ класса B. Π‘Ρ‚Π°Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ, сначала ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ спСцифичный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС B. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ справСдливо возвращаСтся ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 1.
  • Π‘Π½ΠΎΠ²Π° Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΡƒΠΆΠ΅ ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ списка, Ρ‚.Π΅. B ΠΈΠ· списка [B, object].
  • ΠŸΠΎΠΈΡ‰Π΅ΠΌ Π΅Π³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… списках ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ спискС [B] Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ нас Π²ΠΏΠΎΠ»Π½Π΅ устраиваСт. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ список, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΈΠ·ΠΎ всСх списков Π² объСдинСнии. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ L = [A] + [B] = [A, B] ΠΈ соотвСтствСнно L[C] = [C] + [A, B] + merge([object], [object]).
  • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ объСдинСниС merge([object], [object]) ΡƒΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ L[C] = [C] + [A, B] + [object] = [C] + [A, B, object] = [C, A, B, object]. Бписок [A, B, object] β€” это ΠΈ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нашСго объСдинСния merge(L[A], L[B], [A, B]).

НадСюсь Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠΆΠ΅ стал понятнСС. Однако Π΅Ρ‰Ρ‘ Π½Π΅ ясно, Π·Π°Ρ‡Π΅ΠΌ Π² ΠΊΠΎΠ½Π΅Ρ† объСдинСния ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ список всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Особо ΠΏΡ€ΠΎΠ·ΠΎΡ€Π»ΠΈΠ²Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ ΠΌΡ‹ помСняли Π² объСдинСнии мСстами Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ L[A] ΠΈ L[B], Ρ‚.Π΅. написали Π±Ρ‹ merge(L[B], L[A], [A, B]), Ρ‚ΠΎ список Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° class C(A, B) Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ классу B Π±Ρ‹Ρ‚ΡŒ обысканным Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ A. И это ΠΏΡ€Π°Π²Π΄Π°. Бписок Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ порядка локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π°. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ class C(D, E):


object
  |
  D
  | \
  |  E
  | /
  C

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ L[C]:
L[C] = [C] + merge(L[D], L[E], [D, E])
L[E] = [E] + merge(L[D], [D])
L[D] = [D] + merge(L[object], [object]) = [D, object]

ΠŸΡ€ΠΎΠ²Π΅Π΄Ρ‘ΠΌ подстановки ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

L[E] = [E] + merge([D, object], [D]) = [E, D, object]

L[C] = [C] + merge([D, object], [E, D, object], [D, E])

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотритС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ. ОбъСдинСниС merge([D, object], [E, D, object], [D, E]) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² списках [D, object] ΠΈ [D, E] Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ элСмСнтом являСтся D, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом списка [E, D, object]. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, E, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ элСмСнтом [E, D, object] ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являСтся ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом [D, E]. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· 3 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈΠ΄Ρ‘Ρ‚ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 5, послС Ρ‡Π΅Π³ΠΎ ΠŸΠΈΡ‚ΠΎΠ½ Π²Ρ‹ΠΊΠΈΠ½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError: Cannot create a consistent method resolution order (MRO) for bases D, E. Если Π±Ρ‹ нашС объСдинСниС Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ списком Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ ΠΌΡ‹ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ порядка локального ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π°: L[C] = [C] + merge([D, object], [E, D, object]) = [C] + [E] + merge([D, object], [D, object]) = [C] + [E, D] + [object] = [C, E, D, object]. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса C поиск вёлся Π±Ρ‹ сначала Π² классС E, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π² классС D, хотя Π² объявлСнии Π±Ρ‹Π»ΠΎ записано C(D, E).

Π Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π΅ слоТно. Достаточно ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ объявлСниС Π½Π° class C(E, D). Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

L[C] = [C] + merge([E, D, object], [D, object], [E, D]) = [C] + [E] + merge([D, object], [D, object], [D]) = [C] + [E, D, object] = [C, E, D, object].

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

ΠŸΠΈΡ‚ΠΎΠ½ вычисляСт Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ создании класса. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Ρ‘ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ для самопровСрки ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свойство класса __mro__ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C.__mro__). Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ позаковыристСС. Класс object ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Как извСстно ΠΈΠ· сказанного Π²Ρ‹ΡˆΠ΅, ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ наслСдовании классы просто Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΊ ΠΏΡ€Π΅Π΄ΠΊΠ°ΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ object всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ любой Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. И Π΅Ρ‰Ρ‘. Π― Π½Π΅ ΠΊΡƒΠ»ΠΈΠ½Π°Ρ€ ΠΈ Π½Π΅ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π½Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ β€” это всСго лишь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. НС стоит Π°ΠΊΡ†Π΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своё Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° смысловых нСточностях Π² Π½ΠΈΡ….


       Music
      /      \
   Rock      Gothic ------
   /     \        /       \
Metal    Gothic Rock       \
  |             |           \
   \------------------ Gothic Metal
                |          /
                The 69 Eyes

class Music(object): pass
class Rock(Music): pass
class Gothic(Music): pass
class Metal(Rock): pass
class GothicRock(Rock, Gothic): pass
class GothicMetal(Metal, Gothic): pass
class The69Eyes(GothicRock, GothicMetal): pass

L[The69Eyes] = [The69Eyes] + merge(L[GothicRock], L[GothicMetal], [GothicRock, GothicMetal])
L[GothicRock] = [GothicRock] + merge(L[Rock], L[Gothic], [Rock, Gothic])
L[GothicMetal] = [GothicMetal] + merge(L[Metal], L[Gothic], [Metal, Gothic])
L[Rock] = [Rock, Music]
L[Gothic] = [Gothic, Music]
L[Metal] = [Metal] + [Rock, Music] = [Metal, Rock, Music]

ПослС подстановок ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

L[GothicRock] = [GothicRock] + merge([Rock, Music], [Gothic, Music], [Rock, Gothic]) = [GothicRock, Rock, Gothic, Music]

L[GothicMetal] = [GothicMetal] + merge([Metal, Rock, Music], [Gothic, Music], [Metal, Gothic]) = [GothicMetal] + [Metal, Rock, Gothic, Music] = [GothicMetal, Metal, Rock, Gothic, Music]

L[The69Eyes] = [The69Eyes] + merge([GothicRock, Rock, Gothic, Music], [GothicMetal, Metal, Rock, Gothic, Music], [GothicRock, GothicMetal])

= [The69Eyes] + [GothicRock, GothicMetal] + merge([Rock, Gothic, Music], [Metal, Rock, Gothic, Music])

= [The69Eyes] + [GothicRock, GothicMetal, Metal] + merge([Rock, Gothic, Music], [Rock, Gothic, Music])

= [The69Eyes, GothicRock, GothicMetal, Metal, Rock, Gothic, Music]


      Food -------
     /    \       \
    Meat  Milk  Flour
    |   \    \    /  
Rabbit  Pork  Pasty
      \   |   /
         Pie

class Food(object): pass
class Meat(Food): pass
class Milk(Food): pass
class Flour(Food): pass
class Rabbit(Meat): pass
class Pork(Meat): pass
class Pasty(Milk, Flour): pass
class Pie(Rabbit, Pork, Pasty): pass

L[Pie] = [Pie] + merge(L[Rabbit], L[Pork], L[Pasty], [Rabbit, Pork, Pasty])
L[Rabbit] = [Rabbit] + merge(L[Meat], [Meat])
L[Pork] = [Pork] + merge(L[Meat], [Meat])
L[Pasty] = [Pasty] + merge(L[Milk], L[Flour], [Milk, Flour])
L[Meat] = [Meat] + merge(L[Food], [Food]) = [Meat, Food]
L[Milk] = [Milk] + merge(L[Food], [Food]) = [Milk, Food]
L[Flour] = [Flour] + merge(L[Food], [Food]) = [Flour, Food]

ПослС подстановок ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

L[Rabbit] = [Rabbit, Meat, Food]

L[Pork] = [Pork, Meat, Food]

L[Pasty] = [Pasty] + merge([Milk, Food], [Flour, Food], [Milk, Flour]) = [Pasty] + [Milk, Flour, Food] = [Pasty, Milk, Flour, Food]

L[Pie] = [Pie] + merge([Rabbit, Meat, Food], [Pork, Meat, Food], [Pasty, Milk, Flour, Food], [Rabbit, Pork, Pasty])

= [Pie] + [Rabbit] + merge([Meat, Food], [Pork, Meat, Food], [Pasty, Milk, Flour, Food], [Pork, Pasty])

= [Pie] + [Rabbit, Pork] + merge([Meat, Food], [Meat, Food], [Pasty, Milk, Flour, Food], [Pasty])

= [Pie] + [Rabbit, Pork, Meat] + merge([Food], [Food], [Pasty, Milk, Flour, Food], [Pasty])

= [Pie] + [Rabbit, Pork, Meat, Pasty] + merge([Food], [Food], [Milk, Flour, Food])

= [Pie] + [Rabbit, Pork, Meat, Pasty, Milk, Flour, Food]

= [Pie, Rabbit, Pork, Meat, Pasty, Milk, Flour, Food]

Как ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄ΠΊΠ°ΠΌ.

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

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β # something

Β Β Β Β Β Β Β Β A.__init__(self)

Однако, для случая мноТСствСнного наслСдования этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ годится. И Π²ΠΎΡ‚ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:
class C(B, A):

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β # something

Β Β Β Β Β Β Β Β B.__init__(self)

Β Β Β Β Β Β Β Β A.__init__(self)

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ явно обращаСмся ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классам (Π²ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ наслСдованиСм Ρ‚ΠΎ ΠΆΠ΅ самоС). Если ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π½Π°ΠΌ придётся ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ. Π­Ρ‚ΠΎ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ Π±Π°Π³Π°ΠΌΠΈ, Ссли ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ пропустим. Но это Π΅Ρ‰Ρ‘ ΠΏΠΎΠ» Π±Π΅Π΄Ρ‹. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΎ классах A ΠΈ B. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΊΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
class A(P1, P2):

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β # something

Β Β Β Β Β Β Β Β P1.__init__(self)

Β Β Β Β Β Β Β Β P2.__init__(self)

class B(P1, P2):

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β # something

Β Β Β Β Β Β Β Β P1.__init__(self)

Β Β Β Β Β Β Β Β P2.__init__(self)


Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ получится, Ρ‡Ρ‚ΠΎ инициализация ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π²Π° Ρ€Π°Π·Π°. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ класс super. Π’ вСрсии 3.0 ΠΎΠ½ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π»ΠΎΠ²Π΅Ρ‡Π΅Π½ ΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
class C(B, A):

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β # something

Β Β Β Β Β Β Β Β super().__init__() # для вСрсий младшС 3.0 Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ super(C, self)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² вСрсиях 2.x ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сам класс, Π° Π½Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ родитСля. По сути, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса super Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π΅ΠΌΡƒ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ любого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (super().__init__(self) Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅) ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ списку Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° (self.__class__.__mro__), ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ для всСх классов, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° классом Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ (класс C), пСрСдавая Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (self). Π’.Π΅. для нашСго случая:
self.__class__.__mro__ = [C, B, A, P1, P2, …]
super(C, self).__init__() => B.__init__(self)
super(B, self).__init__() => A.__init__(self)
super(A, self).__init__() => P1.__init__(self)
Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° B.__init__ ΠΏΡ€ΠΈ использовании super Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ A.__init__, хотя класс A с Π½ΠΈΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связан ΠΈ Π½Π΅ являСтся Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ. Π’ этом случаС ΠΏΡ€ΠΈ нСобходимости ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΈΡ€ΠΎΠ³ΠΎΠΌ ΠΌΠΎΠ³ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (для вСрсии 2.x):
class Food(object):

Β Β Β Β def drink(self):

Β Β Β Β Β Β Β Β return ['Water', 'Cola']

Β Β Β Β def allergen(self):

Β Β Β Β Β Β Β Β return []

class Meat(Food):

Β Β Β Β def drink(self):

Β Β Β Β Β Β Β Β return [‘Red wine’] + super(Meat, self).drink()

class Milk(Food):

Β Β Β Β def allergen(self):

Β Β Β Β Β Β Β Β return [‘Milk-protein’] + super(Milk, self).allergen()

class Flour(Food): pass

class Rabbit(Meat):

Β Β Β Β def drink(self):

Β Β Β Β Β Β Β Β return [‘Novello wine’] + super(Rabbit, self).drink()

class Pork(Meat):

Β Β Β Β def drink(self):

Β Β Β Β Β Β Β Β return [‘Sovinion wine’] + super(Pork, self).drink()

Β Β Β Β def allergen(self):

Β Β Β Β Β Β Β Β return [‘Pork-protein’] + super(Pork, self).allergen()

class Pasty(Milk, Flour): pass

class Pie(Rabbit, Pork, Pasty):

Β Β Β Β def drink(self):

Β Β Β Β Β Β Β Β return [‘Mineral water’] + super(Pie, self).drink()

if __name__ == «__main__»:

Β Β Β Β pie = Pie()

Β Β Β Β print ‘List of allergens: ‘

Β Β Β Β for allergen in pie.allergen(): print ‘ — ‘ + allergen

Β Β Β Β print ‘List of recommended drinks: ‘

Β Β Β Β for drink in pie.drink(): print ‘ — ‘ + drink

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

List of allergens:

β€” Pork-protein

β€” Milk-protein

List of recommended drinks:

β€” Mineral water

β€” Novello wine

β€” Sovinion wine

β€” Red wine

β€” Water

β€” Cola

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого списка, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ обходился список Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΈΠ½Π°Ρ‡Π΅ Π² спискС Π°Π»Π»Π΅Ρ€Π³Π΅Π½ΠΎΠ² ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ повторСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² самом ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌ классС Food ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” allergen ΠΈ drink. Π’Ρ‹Π·ΠΎΠ² super() Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ пытаСмся ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚ΠΈΠΏΠ° AttributeError: ‘super’ object has no attribute ‘allergen’.

Когда линСаризация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ составлСна.

Π’Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ Π±Ρ‹Π» Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½ случай, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ C3 Π±Ρ‹Π»ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Однако, Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠΈΠ»Π°ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΉ мСст классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² Π² объявлСнии класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ случай, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… составлСниС Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:
class C(A, B): pass
class D(B, A): pass
class E(C, D): pass

L[E] = [E] + merge(L[C], L[D], [C, D]) = [E] + merge([C, A, B], [D, B, A], [C, D])
= [E] + [C, D] + merge([A, B], [B, A])

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ получился Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² объявлСнии C класс A стоит ΠΏΠ΅Ρ€Π΅Π΄ B, Π° Π² объявлСнии D β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. По-Ρ…Ρ€ΠΎΡˆΠ΅ΠΌΡƒ, с этого мСста Π½Π°Π΄ΠΎ ΠΈΠ΄Ρ‚ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ структуру. Но Ссли Π²Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°Π΄ΠΎ быстро ΠΏΠΎΠ΄Ρ…Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ просто Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, ΠŸΠΈΡ‚ΠΎΠ½ Π½Π΅ станСт вас ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ. Бвою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· мСтаклассы. Для этого достаточно Π² мСтаклассС ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ mro(cls) β€” ΠΏΠΎ сути, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ мСтакласса type, β€” ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π°ΠΌ Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ.
class MetaMRO(type):

Β Β Β Β def mro(cls):

Β Β Β Β Β Β Β Β return (cls, A, B, C, D object)


Π”Π°Π»ΡŒΡˆΠ΅ объявлСниС класса различаСтся для вСрсии 3.0 ΠΈ 2.x:
class E(C, D): __metaclass__ = MetaMRO # 2.x
class E(C, D, metaclass = MetaMRO): pass # 3.0


ПослС этого E.__mro__ = [E, A, B, C, D, object]. Π—Π°ΠΌΠ΅Ρ‚Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Π±Π΅Ρ€Ρ‘Ρ‚Π΅ Π½Π° сСбя ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° MRO ΠŸΠΈΡ‚ΠΎΠ½ Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ спокойно провСсти поиск Π² ΠΏΡ€Π΅Π΄ΠΊΠ°Ρ… Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ‡Π΅ΠΌ Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ…. И хотя это Π½Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π½ΠΎ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки:
Unifying types and classes in Python 2.2 β€” ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ΅Ρ‚Π°-Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ MRO, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ мноТСствСнного наслСдования ΠΈ super().
The Python 2.3 Method Resolution Order β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ C3 с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π΅ΡΡ‚ΡŒ рСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ mro ΠΈ merge Π½Π° чистом ΠŸΠΈΡ‚ΠΎΠ½Π΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ воспринимаСт ΠΊΠΎΠ΄ Ρ‡Π΅ΠΌ тСкст.
A Monotonic Superclass Linearization for Dylan β€” сравнСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π»ΠΈΠ½Π΅Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ПослСсловиС.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС смСТныС Ρ‚Π΅ΠΌΡ‹, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ появилось большС вопросов, Ρ‡Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ². НапримСр, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мСтаклассы, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы type ΠΈ object ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Если Π΅ΡΡ‚ΡŒ интСрСс, Ρ‚ΠΎ, со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, я ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

  • интроспСкция Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ help, dir, sys ΠΈ Ρ‚.ΠΏ.
  • type ΠΈ object: скорСС всСго ΠΊΠ°ΠΊ Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ сокращённый ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π²ΠΎΡ‚ этого
  • магия Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: __str__, __init__, __new__, __slots__ ΠΈ Ρ‚.Π΄. На самом Π΄Π΅Π»Π΅ Π΅Ρ‘ Ρ‚Π°ΠΌ довольно ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ нСсколько частСй.
  • мСтаклассы.

P.S.: Бпасибо всСм Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³ ΠΌΠ½Π΅ Π·Π°ΠΏΠΎΡΡ‚ΠΈΡ‚ΡŒ этот Ρ‚ΠΎΠΏΠΈΠΊ ΠΈ Π»ΠΈΡ‡Π½ΠΎ Goodrone.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ iter() ΠΈ next(), ΡƒΡ€ΠΎΠΊ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ python ~ PythonRu

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠΊ: ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python

List, tuple, dict ΠΈ sets β€” это всС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. ВсС эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ iter(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.
ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

mytuple = ("яблоко", "банан", "вишня")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))

Π’Ρ‹Π²ΠΎΠ΄:

яблоко
Π±Π°Π½Π°Π½
вишня

Π”Π°ΠΆΠ΅ строки ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.

mystr = "Π±Π°Π½Π°Π½"
myit =  iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Π’Ρ‹Π²ΠΎΠ΄:

Π±
Π°
Π½
Π°
Π½

Π¦ΠΈΠΊΠ» Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

mytuple = ("яблоко", "банан", "вишня") 
for x in mytuple:
    print(x)

Π’Ρ‹Π²ΠΎΠ΄:

яблоко
Π±Π°Π½Π°Π½
вишня

Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΠ΅ΠΌ символы строки:

mystr = "Π±Π°Π½Π°Π½"
for x in mystr:
    print(x)

Π’Ρ‹Π²ΠΎΠ΄:

Π±
Π°
Π½
Π°
Π½
ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ ΠΊΠ°Π½Π°Π»Ρ‹

Π¦ΠΈΠΊΠ» for фактичСски создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ next() для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚/класс Π² качСствС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __iter__() ΠΈ __next__() для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Как Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΈΠ· ΡƒΡ€ΠΎΠΊΠ° Β«ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ PythonΒ», Ρƒ всСх классов Π΅ΡΡ‚ΡŒ функция ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ __init__(), которая позволяСт Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ __iter__() дСйствуСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Ρ‚. Π”.), Но всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ __next __ () Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числа, начиная с 1, ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ (возвращая 1,2,3,4,5 ΠΈ Ρ‚. Π΄.):

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x


myclass = MyNumbers()  
myiter = iter(myclass)  
print(next(myiter))  
print(next(myiter))  
print(next(myiter))  
print(next(myiter))  
print(next(myiter))

Π’Ρ‹Π²ΠΎΠ΄:

1  
2  
3  
4  
5

StopIteration

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π²Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ next() ΠΈΠ»ΠΈ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² Ρ†ΠΈΠΊΠ»Π΅ for. Π§Ρ‚ΠΎΠ±Ρ‹ итСрация Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»Π°ΡΡŒ Π²Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ StopIteration.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄ __next __() ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли итСрация выполняСтся ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·:

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self
    
    def __next__(self):
        if self.a <= 20:  
            x = self.a
            self.a += 1
            return x
        else:
            raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
    print(x)

Π’Ρ‹Π²ΠΎΠ΄:

1  
2  
3  
...
18
19
20

Π”Π°Π»Π΅Π΅: ΠœΠΎΠ΄ΡƒΠ»ΠΈ Python

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ списков | Python


По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, строковыС элСмСнты ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ лСксикографичСски — ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ, Π° числовыС ΠΏΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ — ΠΎΡ‚ большСго значСния ΠΊ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ:

>>> x = ['bb', 'c', 'aaa']
>>>
>>> x.sort()
>>> x
['aaa', 'bb', 'c']
>>>
>>> x = [ 5, -0.5, 3, 0, 1, 0.5, 2]
>>>
>>> x.sort()
>>> x
[-0.5, 0, 0.5, 1, 2, 3, 5]


Π‘Ρ‚ΠΎΠΈΡ‚ сразу ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ списки с комплСксными числами Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ:

>>> x = [5+1j, 5-1j, 5+0j, -5+1j, 2+2j]
>>> x.sort()
Traceback (most recent call last):
TypeError: '<' not supported between instances of 'complex' and 'complex'


Π—Π°Ρ‚ΠΎ списки с ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ дСсятичными дробями ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отсортированы:

>>> from fractions import Fraction
>>>
>>> x = [Fraction(11, 13), Fraction(5, 6), Fraction(2, 5), Fraction(1, 3)]
>>>
>>> x.sort()
>>> x
[Fraction(1, 3), Fraction(2, 5), Fraction(5, 6), Fraction(11, 13)]
>>>
>>>
>>> from decimal import *
>>>
>>> x = [Decimal('1.123321'), Decimal('1.123322'), Decimal('1.123211')]
>>>
>>> x.sort()
>>> x
[Decimal('1.123211'), Decimal('1.123321'), Decimal('1.123322')]


Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, отсортированы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <:

>>> x = [(0,1,0), (1,1,0), (0,1,1), (0,0,0)]
>>>
>>> x.sort()
>>> x
[(0, 0, 0), (0, 1, 0), (0, 1, 1), (1, 1, 0)]


Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Ρ‡Π°Ρ‰Π΅ всСго интСрСс Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ строки ΠΈ числа. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ сортировки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ собствСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ список, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ отсортирован лСксикографичСски:

>>> x = ['ccc', 'd', 'bb', 'a']
>>>
>>> x.sort()
>>> x
['a', 'bb', 'ccc', 'd']


Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ список Π½Π΅ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ Π° ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строк, Ρ‚ΠΎ для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки:

>>> def len_str(s):
...     return len(s)


ПослС, имя Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ key:

>>> x.sort(key=len_str)
>>> x
['a', 'd', 'bb', 'ccc']


ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ reverse установлСнный Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True сортируСт элСмСнты Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС:

>>> x.sort(key=len_str, reverse=True)
>>> x
['ccc', 'bb', 'a', 'd']


ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΡƒΡŽ сортировку. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ строки ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ символу:

>>> x = ['ubuu', 'waww', 'sdss','ecee']
>>>
>>> def sym2(s):
...     return s[1]
...
>>> x.sort(key=sym2)
>>> x
['waww', 'ubuu', 'ecee', 'sdss']


Для чисСл, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свой порядок сортировки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ:

>>> x = [-3, -10, -1, 10, 2, 0, 5]
>>>
>>> x.sort()
>>> x
[-10, -3, -1, 0, 2, 5, 10]
>>>
>>>
>>> def abs_num(n):
...     return abs(n)
...
>>> x.sort(key=abs_num)
>>> x
[0, -1, 2, -3, 5, -10, 10]

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Python — Sheregeda

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ инициализация

  • __new__(cls, [...])
    Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² класс ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² __init__. __new__ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСсьма Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π² частности, ΠΊΠΎΠ³Π΄Π° класс наслСдуСтся ΠΎΡ‚ нСизмСняСмого (immutable) Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (tuple) ΠΈΠ»ΠΈ строка.

  • __init__(self, [...])
    Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ класса. Π•ΠΌΡƒ пСрСдаётся всё, с Ρ‡Π΅ΠΌ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ конструктор (Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ x = SomeClass(10, 'foo'), __init__ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ 10 ΠΈ 'foo' Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². __init__ ΠΏΠΎΡ‡Ρ‚ΠΈ повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ классов.

  • __del__(self)
    Если __new__ ΠΈ __init__ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, __del__ это Π΅Π³ΠΎ дСструктор. Он Π½Π΅ опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для выраТСния del x (поэтому этот ΠΊΠΎΠ΄ Π½Π΅ эквивалСнтСн x.__del__()). Π‘ΠΊΠΎΡ€Π΅Π΅, ΠΎΠ½ опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² сборщик мусора. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисток Π²ΠΎ врСмя удалСния, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ сокСты ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сравнСния

  • __cmp__(self, other)
    Π‘Π°ΠΌΡ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сравнСния. Он, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для всСх ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сравнСния (>, ==, !=, ΠΈ Ρ‚Π΄.), Π½ΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π²ΡƒΡ… экзСмпляров опрСдСляСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ, Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ большС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ). __cmp__ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, Ссли self < other, ноль, Ссли self == other, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Π² случаС self > other. Но, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ сравнСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… всСх Π² __cmp__. Но __cmp__ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ способом ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΡΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ сравнСния ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ.

  • __eq__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства, ==.

  • __ne__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° нСравСнства, !=.

  • __lt__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° мСньшС, <.

  • __gt__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° большС, >.

  • __le__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ, <=.

  • __ge__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ, >=.

Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· магичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сравнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС сравнСния. Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт класс-Π΄Π΅ΠΊΡ‚ΠΎΡ€Π°Ρ‚ΠΎΡ€ @total_ordering Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ functools, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ всС ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΡ‚ вас достаточно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ __eq__ ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· __gt__, __lt__ ΠΈ Ρ‚.ΠΏ.

ЧисловыС магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • __pos__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ плюса (+some_object)

  • __neg__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для отрицания(-some_object)

  • __abs__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ abs().

  • __invert__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для инвСртирования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ~.

  • __round__(self, n)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ round(). n это число Π·Π½Π°ΠΊΠΎΠ² послС запятой, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ΡŒ.

  • __floor__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для math.floor(), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, округлСния Π΄ΠΎ блиТайшСго мСньшСго Ρ†Π΅Π»ΠΎΠ³ΠΎ.

  • __ceil__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для math.ceil(), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, округлСния Π΄ΠΎ блиТайшСго большСго Ρ†Π΅Π»ΠΎΠ³ΠΎ.

  • __trunc__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для math.trunc(), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, обрСзания Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
  • __add__(self, other)
    Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  • __sub__(self, other)
    Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

  • __mul__(self, other)
    Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  • __floordiv__(self, other)
    ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ //.

  • __div__(self, other)
    Π”Π΅Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€/.

  • __truediv__(self, other)
    ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ from __future__ import division.

  • __mod__(self, other)
    ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ дСлСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %.

  • __divmod__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ divmod().

  • __pow__
    Π’ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ **.

  • __lshift__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <<.

  • __rshift__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ >>.

  • __and__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ И, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ &.

  • __or__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π˜Π›Π˜, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ |.

  • __xor__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ xor, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ^.

ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

β€œOбычноС” слоТСниС some_object + other
ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, отличаСтся порядком слагаСмых other + some_object
ΠžΠ±ΡŠΠ΅ΠΊΡ‚ слСва ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° (other Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π½Π΅ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠΉ вСрсии этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, some_object.__radd__ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π² other Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ __add__.

  • __radd__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ слоТСниС.

  • __rsub__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

  • __rmul__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  • __rfloordiv__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ //.

  • __rdiv__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ /.

  • __rtruediv__(self, other)
    Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ from __future__ import division.

  • __rmod__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹ΠΉ остаток ΠΎΡ‚ дСлСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %.

  • __rdivmod__(self, other)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ divmod(), ΠΊΠΎΠ³Π΄Π° вызываСтся divmod(other, self).

  • __rpow__
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ **.

  • __rlshift__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <<.

  • __rrshift__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ >>.

  • __rand__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ И, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ &.

  • __ror__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π˜Π›Π˜, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ |.

  • __rxor__(self, other)
    ΠžΡ‚Ρ€Π°ΠΆΡ‘Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ xor, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ^.

БоставноС присваиваниС

x += 1 #Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами x = x + 1

  • __iadd__(self, other)
    Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с присваиваниСм.

  • __isub__(self, other)
    Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ с присваиваниСм.

  • __imul__(self, other)
    Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ с присваиваниСм.

  • __ifloordiv__(self, other)
    ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ //=.

  • __idiv__(self, other)
    Π”Π΅Π»Π΅Π½ΠΈΠ΅ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ /=.

  • __itruediv__(self, other)
    Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ from __future__ import division.

  • __imod__(self, other)
    ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ дСлСния с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %=.

  • __ipow__
    Π’ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ **=.

  • __ilshift__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <<=.

  • __irshift__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ >>=.

  • __iand__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ И с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ &=.

  • __ior__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π˜Π›Π˜ с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ |=.

  • __ixor__(self, other)
    Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ xor с присваиваниСм, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ^=.

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ прСобразования Ρ‚ΠΈΠΏΠΎΠ²
  • __int__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² int.

  • __long__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² long.

  • __float__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² float.

  • __complex__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² комплСксноС число.

  • __oct__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ число.

  • __hex__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ число.

  • __index__(self)
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΊ int, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² срСзах (выраТСния Π²ΠΈΠ΄Π° [start:stop:step]). Если Π²Ρ‹ опрСдСляСтС свой числовой Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ индСкс списка, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ __index__.

  • __trunc__(self)
    ВызываСтся ΠΏΡ€ΠΈ math.trunc(self). Π”ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ своё Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π΅Π·Π°Π½Π½ΠΎΠ΅ Π΄ΠΎ цСлочислСнного Ρ‚ΠΈΠΏΠ° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ long).

  • __coerce__(self, other)
    ΠœΠ΅Ρ‚ΠΎΠ΄ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ с ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². __coerce__ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ None Ссли ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Если ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ (ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· 2-Ρ… элСмСнтов) ΠΈΠ· self ΠΈ other, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ своих классов

  • __str__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ str(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ для экзСмпляра вашСго класса.

  • __repr__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ repr(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ для экзСмпляра вашСго класса.

  • __unicode__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unicode(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ для экзСмпляра вашСго класса. unicode() ΠΏΠΎΡ…ΠΎΠΆ Π½Π° str(), Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π² юникодС. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны: Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ str() Π½Π° экзСмплярС вашСго класса, Π° Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ __unicode__(), Ρ‚ΠΎ это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

  • __format__(self, formatstr)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° экзСмпляр вашСго класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ строк Π½ΠΎΠ²ΠΎΠ³ΠΎ стиля. НапримСр, "Hello, {0:abc}!".format(a) ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ a.__format__("abc"). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для опрСдСлСния Π²Π°ΡˆΠΈΡ… собствСнных числовых ΠΈΠ»ΠΈ строковых Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ форматирования.

  • __hash__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hash(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ для экзСмпляра вашСго класса. ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для быстрого сравнСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² словарях. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ __eq__ Ρ‚ΠΎΠΆΠ΅. Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ: a == b ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ hash(a) == hash(b).

  • __nonzero__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ bool(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ для экзСмпляра вашСго класса. Π”ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ True ΠΈΠ»ΠΈ False, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ считаСтС экзСмпляр ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ True ΠΈΠ»ΠΈ False.

  • __dir__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dir(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ Π½Π° экзСмплярС вашСго класса. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

  • __sizeof__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sys.getsizeof(), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ Π½Π° экзСмплярС вашСго класса. ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π±Π°ΠΉΡ‚Π°Ρ….

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ

  • __getattr__(self, name)
    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для случая, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ пытаСтся ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ сущСствуСт (совсСм ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΈ пСрСнаправлСния частых ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ, прСдупрСТдСния ΠΎΠ± использовании ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΏΡ€.

  • __setattr__(self, name, value)
    Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ __getattr__, __setattr__ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для инкапсуляции. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для присвоСния значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ сущСствуСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Π»ΡŽΠ±Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

  • __delattr__
    Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ __setattr__, Π½ΠΎ для удалСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², вмСсто установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

  • __getattribute__(self, name)
    ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с классами Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ (Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ, ΠΊΠ°ΠΊ __getattr__(self, name)).

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ

РСализация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Python Π²Π»Π΅Ρ‡Ρ‘Ρ‚ Π·Π° собой использованиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° интСрфСйсы Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для опрСдСлСния нСизмСняСмых ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСизмСняСмый ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ __len__ ΠΈ __getitem__. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» измСняСмого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ плюс __setitem__ ΠΈ __delitem__. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ __iter__ ΠΈ next().

  • __len__(self)
    Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство элСмСнтов Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π§Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² для измСняСмого ΠΈ нСизмСняСмого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

  • __getitem__(self, key)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ доступС ΠΊ элСмСнту, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис self[key]. Π’ΠΎΠΆΠ΅ относится ΠΈ ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ измСняСмых ΠΈ ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ нСизмСняСмых ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π”ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: TypeError Ссли Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π° ΠΈ KeyError Ссли ΠΊΠ»ΡŽΡ‡Ρƒ Π½Π΅ соотвСтствуСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния.

  • __setitem__(self, key, value)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ присваивании значСния элСмСнту, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис self[nkey] = value. Π§Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° измСняСмого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ KeyError ΠΈ TypeError Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… случаях.

  • __delitem__(self, key)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнта (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ del self[key]). Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° для измСняСмого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½.

  • __iter__(self)
    Π”ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² мноТСствС ситуаций, Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ iter() ΠΈ Π² случаС ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ for x in container:. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сами ΠΏΠΎ сСбС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __iter__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ self.

  • __reversed__(self)
    ВызываСтся Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ повСдСния для встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ reversed(). Π”ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли класс упорядочСнный, ΠΊΠ°ΠΊ список ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

  • __contains__(self, item)
    ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ принадлСТности элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ in ΠΈ not in.

  • __missing__(self, key)
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ наслСдовании ΠΎΡ‚ dict. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая, ΠΊΠΎΠ³Π΄Π° ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΏΠΎ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.

ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

  • __instancecheck__(self, instance)
    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, являСтся Π»ΠΈ экзСмлпяр Ρ‡Π»Π΅Π½ΠΎΠΌ вашСго класса isinstance(instance, class.

  • __subclasscheck__(self, subclass)
    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, наслСдуСтся Π»ΠΈ класс ΠΎΡ‚ вашСго класса issubclass(subclass, class).

Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ магичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт экзСмплярам вашСго класса вСсти сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ смоТСтС Β«Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΒ» ΠΈΡ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

  • __call__(self, [args...])
    ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π»ΡŽΠ±ΠΎΠΌΡƒ экзСмпляру вашСго класса Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΊ-Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ функция. x() ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ x.__call__(), ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ контСкста

ПовСдСниС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° контСкста опрСдСляСтся двумя магичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

  • __enter__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСкста Π² Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠ°, созданного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ with. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ __enter__ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ производится Ρ€Π°Π±ΠΎΡ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ with.

  • __exit__(self, exception_type, exception_value, traceback)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ дСйствия ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° контСкста послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ (ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ€Π²Π°Π½ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹). ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для контролирования ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, чистки, Π»ΡŽΠ±Ρ‹Ρ… дСйствий ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ послС Π±Π»ΠΎΠΊΠ° with. Если Π±Π»ΠΎΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, exception_type, exception_value, ΠΈ traceback Π±ΡƒΠ΄ΡƒΡ‚ установлСны Π² None. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС Π²Ρ‹ сами Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ; Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ __exit__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всё ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ контСкста, просто ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ Π΅ΠΌΡƒ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ.

АбстрактныС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ дСскрипторов

ДСскрипторы Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ»ΠΈ класса. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС дСскрипторы — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: __get__(), __set__(), ΠΈΠ»ΠΈ __delete__(). Π‘Ρ€Π΅Π΄ΠΈ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Python дСскрипторов ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: property, classmethod ΠΈ staticmethod.

  • __get__(self, instance, instance_class)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ значСния ΠΈΠ· дСскриптора.

  • __set__(self, instance, value)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния ΠΈΠ· дСскриптора.

  • __delete__(self, instance)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для удалСния значСния ΠΈΠ· дСскриптора.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

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

  • __copy__(self)
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ copy.copy() для экзСмпляра вашСго класса. copy.copy() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΡƒΡŽ копию вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ создан Π·Π°Π½ΠΎΠ²ΠΎ, всС Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. И ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, измСнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ.

  • __deepcopy__(self, memodict={})
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ copy.deepcopy() для экзСмпляров вашСго класса. copy.deepcopy() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΡƒΡŽ копию вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅. memodict это кэш ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… скопированных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ копирования ΠΈ прСдотвращСния бСсконСчной рСкурсии, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ рСкурсивныС структуры Π΄Π°Π½Π½Ρ‹Ρ…. Когда Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Π½Ρ‘ΠΌ copy.deepcopy() с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ memodict.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ словарСй Π½Π° Python

На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅, ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ словари, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ· словаря. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со словарями, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ. Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со словарями Π² Python сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². НСкоторыС ΠΈΠ· Π½ΠΈΡ…, ΠΌΡ‹ сСйчас рассмотрим.


ΠœΠ΅Ρ‚ΠΎΠ΄ clear()


ΠœΠ΅Ρ‚ΠΎΠ΄ clear() удаляСт всС элСмСнты ΠΈΠ· словаря ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².




my_count = {

Β Β Β Β 10: 'Π΄Π΅ΡΡΡ‚ΡŒ',

Β Β Β Β 11: 'ΠΎΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 12: 'Π΄Π²Π΅Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 13: 'Ρ‚Ρ€ΠΈΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ'

}

my_count.clear()

print(my_count)

{} // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ


ΠœΠ΅Ρ‚ΠΎΠ΄ get()


ΠœΠ΅Ρ‚ΠΎΠ΄ get() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…. НазваниС ΠΊΠ»ΡŽΡ‡Π° всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π’ случаС обращСния ΠΏΠΎ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, Python Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ None. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get(), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π² словарС. И Ссли Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.




first_count = {

Β Β Β Β 14: 'Ρ‡Π΅Ρ‚Ρ‹Ρ€Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 15: 'ΠΏΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 16: 'ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ'

}

print(first_count.get(15))

ΠΏΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран


ΠœΠ΅Ρ‚ΠΎΠ΄ pop()


Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° pop() пСрСдаСтся ΠΊΠ»ΡŽΡ‡, Π° возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.




second_count = {

Β Β Β Β 17: 'ΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 18: 'Π²ΠΎΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 19: 'Π΄Π΅Π²ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ'

}

print(second_count.pop(17))

ΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ // Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»ΠΎΡΡŒ Π½Π° экранС


Из списка ΡƒΠ΄Π°Π»ΠΈΠ»Π°ΡΡŒ ΠΏΠ°Ρ€Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ΠœΠ΅Ρ‚ΠΎΠ΄ pop() удаляСт элСмСнт ΠΈΠ· словаря, ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, пСрСдаСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ элСмСнт Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ»ΠΈ с Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ возникновСнию ошибки.




print(second_count)

{18: 'Π²ΠΎΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ', 19: 'Π΄Π΅Π²ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ'}


ΠœΠ΅Ρ‚ΠΎΠ΄ popitem()


ΠœΠ΅Ρ‚ΠΎΠ΄ popitem() Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ удаляСт ΠΈΠ· словаря случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ, удаляСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.




third_count = {

Β Β Β Β 20: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 21: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½',

Β Β Β Β 22: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Π΄Π²Π°'

}

print(third_count.popitem())

(22, 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Π΄Π²Π°') // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ случайный элСмСнт


ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π² словарС:




print(third_count)

{20: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ', 21: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½'}


ΠœΠ΅Ρ‚ΠΎΠ΄ keys()


ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° keys(), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ· словаря.




fourth_count = {

Β Β Β Β 23: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ',

Β Β Β Β 24: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅',

Β Β Β Β 25: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΏΡΡ‚ΡŒ'

}

print(fourth_count.keys())

dict_keys([23, 24, 25]) // Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран


ΠœΠ΅Ρ‚ΠΎΠ΄ values()


ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° values(), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС значСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ· словаря.




fifth_count = {

Β Β Β Β 26: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ',

Β Β Β Β 27: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ сСмь',

Β Β Β Β 28: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ восСмь'

}

print(fifth_count.values())

// Π’Ρ‹Π²ΠΎΠ΄ всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

dict_values(['Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ', 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ сСмь', 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ восСмь'])


ΠœΠ΅Ρ‚ΠΎΠ΄ items()


ΠœΠ΅Ρ‚ΠΎΠ΄ items() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС элСмСнты «ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅» ΠΈΠ· словаря.




sixth_count = {

Β Β Β Β 29: 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Π΄Π΅Π²ΡΡ‚ΡŒ',

Β Β Β Β 30: 'Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ',

Β Β Β Β 31: 'Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½'

}

print(sixth_count.items()

// Π’Ρ‹Π²ΠΎΠ΄ всСх элСмСнтов

dict_items([(29, 'Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ Π΄Π΅Π²ΡΡ‚ΡŒ'), (30, 'Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ'), (31, 'Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½')])


Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° словаря ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ


ΠœΡ‹ создали ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ age, состоящий ΠΈΠ· ΠΏΠ°Ρ€: ΠΊΠ»ΡŽΡ‡ (имя) — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (возраст). Ѐункция sorted пройдСтся Π² Ρ†ΠΈΠΊΠ»Π΅ for ΠΈ отсортируСт ΠΊΠ»ΡŽΡ‡ΠΈ (ΠΈΠΌΠ΅Π½Π°) ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ.




age = {

Β Β Β Β 'Lorens': 29,

Β Β Β Β 'Viktor': 30,

Β Β Β Β 'Alex': 25

}

for i in sorted(age):

Β Β Β Β print(i,age[i])

Alex - 25

Lorens - 29

Viktor - 30


ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Python



УсловиС Π·Π°Π΄Π°Ρ‡ΠΈ:

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




cars_list = ['volvo', 1995, 5,'audi', 2019, 4, 'mazda', 2010]

РСшСниС:

# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

cars_dict = {}

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ с пустым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… строк

place_str = None

# ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов ΠΈΠ· списка Π² Ρ†ΠΈΠΊΠ»Π΅ с Ρ†Π΅Π»ΡŒΡŽ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт строка ΠΈΠ»ΠΈ число. Если строка, Ρ‚ΠΎ выполняСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ условия if (созданиС списка ΠΈΠ· чисСл Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря), Ссли число, Ρ‚ΠΎ выполнится Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π»ΠΎΠΊ (else).

for element in cars_list:

Β Β Β Β if(type(element) == str):

Β Β Β Β Β Β Β Β cars_dict(element) = []

Β Β Β Β Β Β Β Β place_str = element

Β Β Β Β else:

Β Β Β Β Β Β Β Β cars_dist[place_str].append(element) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² пустой список

print(cars_dist)

# Боздался ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠΈ "ΠΊΠ»ΡŽΡ‡ - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"

{'volvo': [1995, 5], 'audi': [2019, 4], 'mazda': [2010]}


  • Π‘ΠΎΠ·Π΄Π°Π½ΠΎ 25.10.2019 10:33:33



  • ΠœΠΈΡ…Π°ΠΈΠ» Русаков

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π°Π²Ρ‚ΠΎΡ€Π° (ΠœΠΈΡ…Π°ΠΈΠ» Русаков) ΠΈ индСксируСмой прямой ссылкой Π½Π° сайт (http://myrusakov.ru)!

Π”ΠΎΠ±Π°Π²Π»ΡΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎ ΠΌΠ½Π΅ Π² Π΄Ρ€ΡƒΠ·ΡŒΡ Π’ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅: http://vk.com/myrusakov.
Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΌΠ½Π΅ ΠΈ ΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Ρ‘ Π² ΠΌΠΎΠ΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅: http://vk.com/rusakovmy.

Если Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π½Π° сайтС,
Ρ‚ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° обновлСния: ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° обновлСния

Если Ρƒ Вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ вопросы, Π»ΠΈΠ±ΠΎ Ρƒ Вас Π΅ΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π²Ρ‹ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Ρ‚ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²Π½ΠΈΠ·Ρƒ страницы.

Если Π’Π°ΠΌ понравился сайт, Ρ‚ΠΎ размСститС ссылку Π½Π° Π½Π΅Π³ΠΎ (Ρƒ сСбя Π½Π° сайтС, Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅, Π² ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅):

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½Π° Python

Часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с условными конструкциями, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? РассказываСм ΠΏΡ€ΠΎ Ρ‚Π°ΠΊΠΎΠΉ шаблон проСктирования, ΠΊΠ°ΠΊ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ βˆ’ это шаблон проСктирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для создания ΠΎΠ±Ρ‰Π΅Π³ΠΎ интСрфСйса.

НапримСр, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ трСбуСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ интСрфСйсом для выполнСния Π·Π°Π΄Π°Ρ‡. РСализация интСрфСйса опрСдСляСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ.

ВмСсто использования слоТной структуры ΠΈΠ· условий if/elif/else для опрСдСлСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΠ΄ прилоТСния упрощаСтся, становится Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song Π² String. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° называСтся сСриализациСй. Π­Ρ‚ΠΈ трСбования часто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат всю Π»ΠΎΠ³ΠΈΠΊΡƒ:

#serializer_demo.py

import json
import xml.etree.ElementTree as et

class Song:
    def __init__(self, song_id, title, artist):
        self.song_id = song_id
        self.title = title
        self.artist = artist


class SongSerializer:
    def serialize(self, song, format):
        if format == 'JSON':
            song_info = {
                'id': song.song_id,
                'title': song.title,
                'artist': song.artist
            }
            return json.dumps(song_info)
        elif format == 'XML':
            song_info = et.Element('song', attrib={'id': song.song_id})
            title = et.SubElement(song_info, 'title')
            title.text = song.title
            artist = et.SubElement(song_info, 'artist')
            artist.text = song.artist
            return et.tostring(song_info, encoding='unicode')
        else:
            raise ValueError(format)

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Song для прСдставлСния пСсни ΠΈ класс SongSerializer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song Π² Π΅Π³ΠΎ строковоС прСдставлСниС Π² соотвСтствии со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° format.

ΠœΠ΅Ρ‚ΠΎΠ΄ .serialize() ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°: JSON ΠΈ XML. Π›ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ поддСрТиваСтся, поэтому Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄:

>>> import serializer_demo as sd
>>> song = sd.Song('1', 'Water of Love', 'Dire Straits')
>>> serializer = sd.SongSerializer()

>>> serializer.serialize(song, 'JSON')
'{"id": "1", "title": "Water of Love", "artist": "Dire Straits"}'

>>> serializer.serialize(song, 'XML')
'<song><title>Water of Love</title><artist>Dire Straits</artist></song>'

>>> serializer.serialize(song, 'YAML')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./serializer_demo.py", line 30, in serialize
    raise ValueError(format)
ValueError: YAML

Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song ΠΈ serializer, Π·Π°Ρ‚Π΅ΠΌ Song прСобразуСтся Π² строковоС прСдставлСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .serialize(). ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song ΠΈ строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ПослСдний Π²Ρ‹Π·ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ YAML Π² качСствС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ serializer, поэтому Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError.

Π­Ρ‚ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ логичСских Π²Π΅Ρ‚Π²ΠΈ исполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° format ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ ΠΊΠΎΠ΄.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слоТного ΠΊΠΎΠ΄Π° с условиями

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ раскрываСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ Π² слоТном логичСском ΠΊΠΎΠ΄Π΅. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ if/elif/else ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для измСнСния повСдСния прилоТСния, Π½ΠΎ ΠΎΠ½ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, восприятиС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Код слоТСн Π΅Ρ‰Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ выполняСт ΠΌΠ½ΠΎΠ³ΠΎ дСйствий. Богласно ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ СдинствСнной отвСтствСнности, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, класс ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ измСнСния своих состояний.

ΠœΠ΅Ρ‚ΠΎΠ΄ .serialize() Π² SongSerializer ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ способно привСсти ΠΊ появлСнию ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ситуации, ΠΊΠΎΠ³Π΄Π° придСтся Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ свойств класса Song ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для размСщСния Π½ΠΎΠ²ΠΎΠΉ структуры.
  • Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ строковоС прСдставлСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Β (простой JSON ΠΈ JSON API): Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .serialize() вмСстС со строковым прСдставлСниСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ прСдставлСниС ТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .serialize().

Π’ ΠΈΠ΄Π΅Π°Π»Π΅, любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ вносится Π±Π΅Π· использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β .serialize().

Π’ поисках ΠΎΠ±Ρ‰Π΅Π³ΠΎ интСрфСйса

Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ слоТный ΠΊΠΎΠ΄ с условиями, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ†Π΅Π»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ логичСского отвСтвлСния.

Код, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ if/elif/else, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Ρ†Π΅Π»ΡŒ, которая рСализуСтся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song Π² строчный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ логичСской Π²Π΅Ρ‚ΠΊΠ΅.

НуТно Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ трСбуСтся Ρ‚Π°ΠΊΠΎΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку.

Когда Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, ΠΌΡ‹ прСдоставляСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ способа.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ сначала осущСствляСм ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² JSON ΠΈ XML, Π° Π·Π°Ρ‚Π΅ΠΌ прСдоставляСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° основС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ format ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· измСнСния повСдСния βˆ’ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π°.

Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π° Π² ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ интСрфСйс

Π–Π΅Π»Π°Π΅ΠΌΡ‹ΠΉ интСрфСйс βˆ’ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Song ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строковоС прСдставлСниС.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом являСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· логичСских ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ Π² этот интСрфСйс. ДобавляСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ._serialize_to_json() ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄ сСриализации JSON. Π—Π°Ρ‚Π΅ΠΌ измСняСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для Π²Ρ‹Π·ΠΎΠ²Π°, вмСсто Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ‚Π΅Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if:

class SongSerializer:
    def serialize(self, song, format):
        if format == 'JSON':
            return self._serialize_to_json(song)
        # The rest of the code remains the same

    def _serialize_to_json(self, song):
        payload = {
            'id': song.song_id,
            'title': song.title,
            'artist': song.artist
        }
        return json.dumps(payload)

ПослС внСсСния этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²Ρ‹ смоТСтС ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ. Π—Π°Ρ‚Π΅ΠΌ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС для XML, прСдставляя Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ._serialize_to_xml(), пСрСмСщая Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Π½Π΅Π³ΠΎ ΠΈ измСняя Π²Π΅Ρ‚ΠΊΡƒ elif для Π²Ρ‹Π·ΠΎΠ²Π°.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

class SongSerializer:
    def serialize(self, song, format):
        if format == 'JSON':
            return self._serialize_to_json(song)
        elif format == 'XML':
            return self._serialize_to_xml(song)
        else:
            raise ValueError(format)

    def _serialize_to_json(self, song):
        payload = {
            'id': song.song_id,
            'title': song.title,
            'artist': song.artist
        }
        return json.dumps(payload)

    def _serialize_to_xml(self, song):
        song_element = et.Element('song', attrib={'id': song.song_id})
        title = et.SubElement(song_element, 'title')
        title.text = song.title
        artist = et.SubElement(song_element, 'artist')
        artist.text = song.artist
        return et.tostring(song_element, encoding='unicode')

Новая вСрсия воспринимаСтся ΠΏΡ€ΠΎΡ‰Π΅, Π½ΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ дальшС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Базовая рСализация Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Главная идСя Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ являСтся format.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²Ρ‹ добавляСтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ._get_serializer(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Он ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ format ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сСриализации:

class SongSerializer:
    def _get_serializer(self, format):
        if format == 'JSON':
            return self._serialize_to_json
        elif format == 'XML':
            return self._serialize_to_xml
        else:
            raise ValueError(format)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .serialize() Π² SongSerializer для использования ._get_serializer(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ:

class SongSerializer:
    def serialize(self, song, format):
        serializer = self._get_serializer(format)
        return serializer(song)

    def _get_serializer(self, format):
        if format == 'JSON':
            return self._serialize_to_json
        elif format == 'XML':
            return self._serialize_to_xml
        else:
            raise ValueError(format)

    def _serialize_to_json(self, song):
        payload = {
            'id': song.song_id,
            'title': song.title,
            'artist': song.artist
        }
        return json.dumps(payload)

    def _serialize_to_xml(self, song):
        song_element = et.Element('song', attrib={'id': song.song_id})
        title = et.SubElement(song_element, 'title')
        title.text = song.title
        artist = et.SubElement(song_element, 'artist')
        artist.text = song.artist
        return et.tostring(song_element, encoding='unicode')

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π­Ρ‚ΠΎ βˆ’ клиСнтский ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ шаблона. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс называСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ, в нашСм случаС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ βˆ’ это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Song ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строковоС прСдставлСниС.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ._serialize_to_json() ΠΈ ._serialize_to_xml() ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ рСализациями ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

НаконСц, ΠΌΠ΅Ρ‚ΠΎΠ΄ ._get_serializer() являСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ-создатСлСм. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ с ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ частями класса SongSerializer.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ self. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса SongSerializer, Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ внСшними функциями:

class SongSerializer:
    def serialize(self, song, format):
        serializer = get_serializer(format)
        return serializer(song)


def get_serializer(format):
    if format == 'JSON':
        return _serialize_to_json
    elif format == 'XML':
        return _serialize_to_xml
    else:
        raise ValueError(format)


def _serialize_to_json(song):
    payload = {
        'id': song.song_id,
        'title': song.title,
        'artist': song.artist
    }
    return json.dumps(payload)


def _serialize_to_xml(song):
    song_element = et.Element('song', attrib={'id': song.song_id})
    title = et.SubElement(song_element, 'title')
    title.text = song.title
    artist = et.SubElement(song_element, 'artist')
    artist.text = song.artist
    return et.tostring(song_element, encoding='unicode')

ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠ° Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° всСгда ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Β Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса. Он Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-создатСля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² соотвСтствии со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСдоставлСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для выполнСния своСй Π·Π°Π΄Π°Ρ‡ΠΈ.

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

>>> import serializer_demo as sd
>>> song = sd.Song('1', 'Water of Love', 'Dire Straits')
>>> serializer = sd.SongSerializer()

>>> serializer.serialize(song, 'JSON')
'{"id": "1", "title": "Water of Love", "artist": "Dire Straits"}'

>>> serializer.serialize(song, 'XML')
'<song><title>Water of Love</title><artist>Dire Straits</artist></song>'

>>> serializer.serialize(song, 'YAML')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./serializer_demo.py", line 13, in serialize
    serializer = get_serializer(format)
  File "./serializer_demo.py", line 23, in get_serializer
    raise ValueError(format)
ValueError: YAML

Π’Ρ‹ создаСтС Song ΠΈ serializer ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ serializer для прСобразования Song Π² строковоС прСдставлСниС с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ YAML Π½Π΅ являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ, появляСтся ValueError.

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любой ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚) зависит ΠΎΡ‚ интСрфСйса (ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°), ΠΈ сущСствуСт нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ этого интСрфСйса. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² создатСлС.

БущСствуСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π·Π°Π΄Π°Ρ‡, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Π—Π°ΠΌΠ΅Π½Π° слоТного логичСского ΠΊΠΎΠ΄Π°: слоТныС логичСскиС структуры if/elif/else Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½ΠΎΠ²Ρ‹Π΅ логичСскиС Π²Π΅Ρ‚ΠΊΠΈ.

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ βˆ’ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π·Π°ΠΌΠ΅Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ логичСской Π²Π΅Ρ‚ΠΊΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ классы с ΠΎΠ±Ρ‰ΠΈΠΌ интСрфСйсом, Π° ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

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

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

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ, которая ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° основС этой ΠΎΠΏΡ†ΠΈΠΈ.

ОбъСдинСниС ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΎΠ±Ρ‰Π΅ΠΌ интСрфСйсС. Π’ соотвСтствии с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. НСобходимый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, Π° Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ – ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

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

ВсС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ситуации схоТи. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ срСдства для опрСдСлСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, поэтому Π²ΠΎ всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

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

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ

Design Patterns: Elements of Reusable Object-Oriented SoftwareΒ βˆ’ Π½Π°Π±ΠΎΡ€ распространённых шаблонов проСктирования.

Heads First Design Patterns: A Brain-Friendly Guide βˆ’ ΠΊΠ½ΠΈΠ³Π° ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… шаблонов проСктирования.

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΡΡ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄? Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° Python on Real Python

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² Python | ΠœΠ΅Ρ‚ΠΎΠ΄ Python ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1. ΠœΠ΅Ρ‚ΠΎΠ΄ Python ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Ρ†Π΅Π»ΡŒ

На ΠΏΡƒΡ‚ΠΈ ΠΊ Python ΠΌΡ‹ познакомились с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Python. Но Ρ€Π°Π·Π²Π΅ ΠΎΠ½ΠΈ Π½Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС? Π§Ρ‚ΠΎ ΠΆ, ΠΏΠΎΡ€Π° провСсти сравнСниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Python ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Но ΠΏΠ΅Ρ€Π΅Π΄ этим Π΄Π°Π²Π°ΠΉΡ‚Π΅ пСрСсмотрим ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Python.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ «Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² Python».

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² Python | ΠœΠ΅Ρ‚ΠΎΠ΄ Python ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ функциями Π² Python

2. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python — ВСрсия

Ѐункция Python — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°. Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ функциях Python, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ встроСнных ΠΈ опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ функциях.

Π°. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Как ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык программирования, Python позволяСт Π½Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ наши собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

 >>> def add (a, b):
          Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a + b
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (3, -3) 

0

ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΒ». Как ΠΈ оТидалось, ΠΎΠ½ добавляСт Π΄Π²Π° значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ со значСниями -3 ΠΈ 3, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python.

Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, позволяСт Π½Π°ΠΌ Π»Π΅Π³ΠΊΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ функциях, строках Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, области дСйствия ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python .

Π³. ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ нашСй Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΠΈ Π½Π° встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ обсудили ΠΎΠΊΠΎΠ»ΠΎ 66 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт Π½Π°ΠΌ Python, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ часто Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

 >>> def demofunc (a, b):
"" "
// Π­Ρ‚Π° функция ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для дСмонстрации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python
"" "
print ("ΠΠ°Ρ‡Π°Ρ‚ΡŒ")
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (макс (Π°, Π±))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (абс (Π°), абс (Π±))
print (float (a), b)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ (Π°))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ…Π΅Ρˆ (Π°), Ρ…Π΅Ρˆ (Π±))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (len ('ab'))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ‚ΠΈΠΏ (Π°))
для я в диапазонС (2,4): print (i)
>>> demofunc (2,3) 

Начало

3

2 3

2.0 3

Π›ΠΎΠΆΡŒ

2 3

2

<класс «int»>

2

3

 >>> c = lambda: print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚")
>>> Ρ‚ΠΈΠΏ (c) 


Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ ython Lambda Expressions .

3. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Python — ВСрсия

ΠœΠ΅Ρ‚ΠΎΠ΄

Python ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ . ΠœΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΎΠ½, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вносит измСнСния Π² этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ классу . Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

 >>> класс автомобиля:
def __init __ (я, Ρ†Π²Π΅Ρ‚):
self.color = Ρ†Π²Π΅Ρ‚
def start (self):
print ("Запуск двигатСля")
def showcolor (сам):
print (f "Π― {self.color}")
>>> car = vehicle ('Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ')
>>> car.start () 

ΠŸΡƒΡΠΊ двигатСля

 >>> car.showcolor () 

Π― Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ
Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ класс «транспортноС срСдство». Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΒ» ΠΈΠ· этого Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°.Π—Π΄Π΅ΡΡŒ __init __ () — это магичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слуТит конструктором для класса. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ start () ΠΈ showcolor () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Python Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«selfΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

4. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пСрСсмотрСли ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Python, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ…. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ основныС различия.

  1. ΠœΠ΅Ρ‚ΠΎΠ΄ Python вызываСтся для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ start () для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° car. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Python Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ — ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π΅ Π½ΠΈ для ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ.
  2. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ функция Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΠΈΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π˜Ρ‚Π°ΠΊ, это всС ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² Python. НадСюсь, Π²Π°ΠΌ понравится нашС объяснСниС

5.Π’Ρ‹Π²ΠΎΠ΄

ПослС этого обсуТдСния ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π² Python с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ тонкая Π³Ρ€Π°Π½ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ЕдинствСнноС сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Python для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ с функциями всС ΠΈΠ½Π°Ρ‡Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚; Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚.
Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ — Python Closure ΠΈ Python Range Function
Для справки

.

3. МодСль Π΄Π°Π½Π½Ρ‹Ρ… — докумСнтация Python 3.8.6

3.1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, значСния ΠΈ Ρ‚ΠΈΠΏΡ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — это абстракция Π΄Π°Π½Π½Ρ‹Ρ… Python. ВсС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Python
прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. (Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС ΠΈ Π²
соотвСтствиС ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ„ΠΎΠ½ НСймана Β«ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉΒ», ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅
прСдставлСны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.)

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΈΠΏ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½ΠΈΠΊΠΎΠ³Π΄Π°
измСняСтся послС создания; Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎΠ± адрСсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²
объСм памяти.ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β« is Β» сравниваСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; Ρ‚ΠΎ
id () Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π΅Π³ΠΎ Π»ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ.

Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CPython: Для CPython id (x) — это адрСс памяти, Π³Π΄Π΅ хранится x .

Π’ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° опрСдСляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «выполняСт
ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ? Β»), Π° Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого
Ρ‚ΠΈΠΏ. Ѐункция type () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ
сам).Как ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

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

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

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

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

НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ содСрТат ссылки Π½Π° «внСшниС» рСсурсы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ
ΠΎΠΊΠ½Π°. ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ эти рСсурсы ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
сборщиком мусора, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сборка мусора Π½Π΅ гарантируСтся,
Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ явный способ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ внСшний рСсурс,
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ close () .ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся явно
Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ЗаявлСниС Β« ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ … , Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Β»
ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β« с Β» ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ способы ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это.

НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ содСрТат ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹; ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ .
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, списки ΠΈ словари. Бсылки
Ρ‡Π°ΡΡ‚ΡŒ стоимости ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ стоимости
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ значСния, Π° Π½Π΅ идСнтичности содСрТащихся Π² Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;
ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± измСнчивости ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тоТдСства
ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно содСрТащиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.Π˜Ρ‚Π°ΠΊ, Ссли нСизмСняСмый ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
(ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ) содСрТит ссылку Π½Π° измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСняСтся, Ссли
этот измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

Π’ΠΈΠΏΡ‹ Π²Π»ΠΈΡΡŽΡ‚ практичСски Π½Π° всС аспСкты повСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ
Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС затрагиваСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: для нСизмСняСмых Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ,
вычислСниС Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ фактичСски Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ссылку Π½Π° любой ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с
ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° для измСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² это Π½Π΅ допускаСтся. НапримСр.,
послС a = 1; b = 1 , a ΠΈ b ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ
со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ послС c = []; d =
[]
, c ΠΈ d Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ относятся ΠΊ Π΄Π²ΡƒΠΌ Ρ€Π°Π·Π½Ρ‹ΠΌ, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎΠ²Ρ‹ΠΌ
создал пустыС списки.(ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ c = d = [] Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±ΠΎΠΈΠΌ
c ΠΈ d .)

3.2. Бтандартная иСрархия Ρ‚ΠΈΠΏΠΎΠ²

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список Ρ‚ΠΈΠΏΠΎΠ², встроСнных Π² Python. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ
(написано Π½Π° C, Java ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ) ΠΌΠΎΠΆΠ΅Ρ‚
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π’ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях Python ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΡ‹ ΠΊ Ρ‚ΠΈΠΏΡƒ
иСрархия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ числа, эффСктивно Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ массивы Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ Ρ‚. Π΄.),
хотя Ρ‚Π°ΠΊΠΈΠ΅ дополнСния часто ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

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

НСт

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

NotImplemented

Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ СдинствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚Π°
Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· встроСнноС имя NotImplemented . ЧисловыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ сравнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚
опСрация для прСдоставлСнных ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². (Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚
отраТСнная опСрация ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΡ‚ΠΊΠ°Ρ‚, Π² зависимости ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.)

.

строковых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Python | Programiz

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° capitalize ()

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ

Python String casefold ()

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ струны Π² футляр

Python Π¦Π΅Π½Ρ‚Ρ€ струн ()

ДополняСт строку ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ символом

Python ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ вхоТдСния подстроки Π² строкС

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° строки Python ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строки

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° заканчиваСтся Π½Π° ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, заканчиваСтся Π»ΠΈ строка ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ суффиксом

Python String expandtabs ()

ЗамСняСт символ табуляции ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ

Python String find ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния подстроки

Python Π€ΠΎΡ€ΠΌΠ°Ρ‚ строки ()

Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ строку Π² Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄

Python String format_map ()

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ словаря

Python ИндСкс строки ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс подстроки

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° isalnum ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python isalpha ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, всС Π»ΠΈ символы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°ΠΌΠΈ

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° isdecimal ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ дСсятичныС символы

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python isdigit ()

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ символов

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° isidentifier ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° islower ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, всС Π»ΠΈ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρ‹ Π² строкС строчныС

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° isnumeric ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ числовыС символы

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python isprintable ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹ΠΉ символ

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python isspace ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы

Python String istitle ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ строку с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python isupper ()

возвращаСтся, Ссли всС символы ΡΠ²Π»ΡΡŽΡ‚ΡΡ прописными

Python String join ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π½ΡƒΡŽ строку

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python ljust ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ строку Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρ‹

НиТняя строка Python ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python lstrip ()

УдаляСт Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ символы

Python String maketrans ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ прСобразования

Π Π°Π·Π΄Π΅Π» строки Python ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ

Python String replace ()

замСняСт подстроку Π²Π½ΡƒΡ‚Ρ€ΠΈ

Python String rfind ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ индСкс подстроки

Python String rindex ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ индСкс подстроки

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° rjust ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ строку Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρ‹

Python String rpartition ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ

Python String rsplit ()

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строки справа

Python String rstrip ()

УдаляСт Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ символы

Python String split ()

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строки слСва

Python String splitlines ()

Π Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ строку Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… Π»ΠΈΠ½ΠΈΠΈ

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Python начинаСтся с ()

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, начинаСтся Π»ΠΈ строка с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строки

Полоска Python String ()

УдаляСт Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ символы

Python String swapcase ()

Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ Π½Π° строчныС; Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚

Python String title ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π² рСгистрС

Python String translate ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΡƒΡŽ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° вСрхняя ()

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС

Python Π‘Ρ‚Ρ€ΠΎΠΊΠ° zfill ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ копию строки, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ нулями

.

Глоссарий — докумСнтация Python 3.8.6

>>>

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Часто встрСчаСтся Π·Π° ΠΊΠΎΠ΄ΠΎΠΌ
ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅.

...

МоТно ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π°:

  • ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅
    ΠΊΠΎΠ΄ для Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° с отступом, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠ°Ρ€Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… left ΠΈ
    ΠΏΡ€Π°Π²Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ (ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹Π΅
    ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ) ΠΈΠ»ΠΈ послС указания Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°.

  • ВстроСнная константа Ellipsis .

2to3

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пытаСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Python 2.x Π² ΠΊΠΎΠ΄ Python 3.x с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° нСсовмСстимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°
source ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

2to3 доступСн Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠ°ΠΊ lib2to3 ; Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ
Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° прСдоставляСтся ΠΊΠ°ΠΊ Tools / scripts / 2to3 . Π’ΠΈΠ΄Π΅Ρ‚ΡŒ
2to3 — автоматичСский ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΠ΄Π° Python 2 Π² 3.

абстрактный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс

АбстрактныС Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΡƒΡ‚ΠΈΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ
прСдоставлСниС способа опрСдСлСния интСрфСйсов, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
hasattr () Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅ ΠΈΠ»ΠΈ слСгка Π½Π΅Π²Π΅Ρ€Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с
магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹). Азбука Π²Π²ΠΎΠ΄ΠΈΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ
подклассы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ класса, Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ
всС Π΅Ρ‰Π΅ распознаСтся isinstance () ΠΈ issubclass () ; ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ
abc ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Python ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство встроСнных ABC для
структуры Π΄Π°Π½Π½Ρ‹Ρ… (Π² коллСкциях.ΠΌΠΎΠ΄ΡƒΠ»ΡŒ abc ), числа (Π²
Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ), ΠΏΠΎΡ‚ΠΎΠΊΠΈ (Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ io ), срСдства поиска ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ (Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ importlib.abc ). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный
ABC с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ abc .

аннотация

ΠœΠ΅Ρ‚ΠΊΠ°, связанная с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, классом
Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅,
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ соглашСнию ΠΊΠ°ΠΊ подсказка Ρ‚ΠΈΠΏΠ°.

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

Π‘ΠΌ. ΠΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, PEP 484
ΠΈ PEP 526 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ) ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅
функция. Π•ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова : Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,
    name = ) Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ пСрСдаСтся ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² словарС
    ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ** .НапримСр, 3 ΠΈ 5 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами.
    Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… complex () :

     комплСкс (Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ = 3, Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ = 5)
    слоТный (** {'Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ': 3, 'Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ': 5})
     
  • ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ : Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ являСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова.
    ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
    ΠΈ / ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ элСмСнты ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит * .
    НапримСр, 3 ΠΈ 5 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π²
    ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π²ΠΎΠ½ΠΊΠΈ:

     комплСкс (3, 5)
    комплСкс (* (3, 5))
     

АргумСнты Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π‘ΠΌ. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π—Π²ΠΎΠ½ΠΊΠΈΒ» ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ это Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
БинтаксичСски любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прСдставлСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°; Ρ‚ΠΎ
ΠΎΡ†Π΅Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ запись Π² глоссарии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², FAQ ΠΏΠΎ
Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈ PEP 362 .

асинхронный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСкста

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт срСдой, Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π²
async с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡƒΡ‚Π΅ΠΌ опрСдСлСния

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *