В данном коде демонстрируется ручное расширение класса — добавление нового метода к классу после его создания.
Принцип работает, потому что методы всегда можно присваивать классу после того, как он был создан. До тех пор пока присваиваемые методы являются функциями с дополнительным первым аргументом для получения нового экземпляра 𝚜𝚎𝚕𝚏».
Разберем выполнение кода по шагам:
🔘 Создается класс 𝙲𝚕𝚒𝚎𝚗𝚝𝟷 с конструктором, который принимает 𝚟𝚊𝚕𝚞𝚎 и сохраняет его в атрибут экземпляра
🔘 Определяется функция 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌(𝚘𝚋𝚓), которая принимает объект и возвращает 𝚘𝚋𝚓.𝚟𝚊𝚕𝚞𝚎 ∗ 𝟺
🔘 Происходит присваивание 𝙲𝚕𝚒𝚎𝚗𝚝𝟷.𝚎𝚐𝚐𝚜 = 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌 — функция становится методом класса
🔘 Создается экземпляр 𝚇 = 𝙲𝚕𝚒𝚎𝚗𝚝𝟷('𝙽𝚒!'), где 𝚟𝚊𝚕𝚞𝚎 становится '𝙽𝚒!'
🔘 Вызывается 𝚇.𝚎𝚐𝚐𝚜()
При вызове 𝚇.𝚎𝚐𝚐𝚜() происходит следующее:
− Python автоматически передает экземпляр 𝚇 как первый аргумент в функцию 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌
− Функция получает 𝚘𝚋𝚓 = 𝚇, где 𝚇.𝚟𝚊𝚕𝚞𝚎 = '𝙽𝚒!'
− Выполняется 𝚛𝚎𝚝𝚞𝚛𝚗 𝚘𝚋𝚓.𝚟𝚊𝚕𝚞𝚎 ∗ 𝟺, что дает '𝙽𝚒!' ∗ 𝟺 = '𝙽𝚒!𝙽𝚒!𝙽𝚒!𝙽𝚒!'
Данный аргумент может использоваться для обращения к информации о состоянии, доступной из экземпляра класса, хотя функции определены независимо от класса.
Post #4340
607
- 👍 3
- 👎 1
- 🫡 1