
Це фрагмент книги Python з нуля, яка допоможе вам навчитися програмуванню з нуля. Ви можете знайти його на Allegro, Empik та в інтернет-книгарнях.
class, після чого вказуємо назву класу, ставимо двокрапку та визначаємо тіло цього класу. Поки що ми визначаємо порожній клас, тому в його тілі ми розмістимо лише pass.cookie.class Cookie: pass cookie = Cookie()

Клас нагадує рецепт страви, а об’єкт — це конкретна порція їжі, приготована за цим рецептом.

_. Однак конвенція іменування дещо інша. Для функцій та змінних ми використовували snake_case. У випадку класів ми використовуємо PascalCase (або UpperCamelCase), тобто ми починаємо кожне слово з великої літери, не використовуючи пробіли та підкреслення.User;Invoice;OrderReceipt;NeuralNetwork.
Personal_Invoice;UserAddress;Carengine;doctor;Dog.
type в об’єкті cookie1, ми використаємо cookie1.type. Це застосовується і для присвоєння значення, і для його отримання.class Cookie: pass cookie1 = Cookie() cookie2 = Cookie() cookie1.type = "Dog" cookie1.breed = "Border Collie" cookie2.type = "Food" print(cookie1.type) # Dog print(cookie1.breed) # Border Collie print(cookie2.type) # Food
Player, який представлятиме гравців гри. Надай йому змінну points зі значенням 0. Виведи кількість балів (має складати 0), а потім додай один бал до атрибута points та виведи кількість балів ще раз (тепер вона має становити 1).self. Коли ми викликаємо метод, ми починаємо з об’єкта, потім ставимо крапку, назву методу та дужки з аргументами.class User: def cheer(self): print(f"Привіт, мене звати {self.name}") def say_hello(self, other): name=self.name; print(f"Привіт, {other}, мене звати {name}") user = User() user.name = "Мацєк" user.cheer() # Привіт, мене звати Мацєк user.say_hello("Марта") # Привіт, Марта, мене звати Мацєк
self можна використати також для зміни атрибутів даного об’єкта.class Position: def step_right(self): self.x += 1.0 def move_up(self, value): self.y += value pos = Position() pos.x = 0.0 pos.y = 0.0 pos.step_right() print(pos.x) # 1.0 pos.move_up(6.0) print(pos.y) # 6.0 pos.move_up(3.0) print(pos.y) # 9.0
__init__ [^201_1] з нашого класу. Цей метод називається ініціалізатором. У його тілі ми визначаємо, що має статися під час створення об’єкта. Найчастіше тут ми вказуємо атрибути об’єкта.class Game: def __init__(self): print("Starting...") self.started = True game = Game() # Starting... print(game.started) # True
__init__ визначає, скільки аргументів має входити до виклику конструктора (тобто в дужках, які ми ставимо після назви класу, коли створюємо об’єкт). Отже, якщо у функції __init__ ми додамо параметр name, тоді під час створення об’єкта ми більше не зможемо залишати порожні дужки. Ми повинні вказати там аргумент, який буде назвою. Характерна риса функції __init__ — це те, що вона очікує певних параметрів, а потім призначає їх об’єкту як атрибути з тими ж назвами.class User: def __init__(self, name): self.name = name user1 = User("Мацєк") user2 = User("Марта") print(user1.name) # Мацєк print(user2.name) # Марта
name і surname у прикладі нижче. Значення атрибута full_name розраховується на основі name і surname. Значення points визначається як 0.class Player: def __init__(self, name, surname): self.name = name self.surname = surname self.full_name = f"{name} {surname}" self.points = 0 player = Player("Міхал", "Мазур") print(player.name) # Міхал print(player.surname) # Мазур print(player.full_name) # Міхал Мазур print(player.points) # 0
balance, який вказує суму коштів на цьому рахунку. Він також повинен містити методи:deposit, який додає вказану суму грошей доbalance,withdraw, який за достатньої кількості коштів віднімає суму відbalance, і повертаєTrue, а в інакшому випадку —False.
account = BankAccount() print(account.balance) # 0 account.deposit(1000) print(account.balance) # 1000 account.deposit(2000) print(account.balance) # 3000 res = account.withdraw(1500) print(res) # True print(account.balance) # 1500 res = account.withdraw(2000) print(res) # False print(account.balance) # 1500
name в об’єкті user1 не матиме жодного впливу на user2.class User: def __init__(self, name): self.name = name user1 = User("Рафал") user2 = User("Рафал") print(user1.name) # Рафал print(user2.name) # Рафал user1.name = "Бартек" print(user1.name) # Бартек print(user2.name) # Рафал
user1 = User("Рафал") user2 = user1 print(user1.name) # Рафал print(user2.name) # Рафал user1.name = "Бартек" print(user1.name) # Бартек print(user2.name) # Бартек

Дві змінні вказують на той самий об’єкт, тож властивість цього об’єкта змінює значення.
user1 = User("Рафал") user2 = user1 print(user1.name) # Рафал print(user2.name) # Рафал user1 = User("Бартек") print(user1.name) # Бартек print(user2.name) # Рафал

Спочатку дві змінні вказують на той самий об’єкт, потім змінна
user1 починає вказувати на інший._. Такі атрибути та методи ми називаємо приватними. Вони повинні використовуватися виключно в інших методах того ж класу.class BankAccount: # ... def _validate_user(self, token): # ... pass def make_transaction(self, token, transaction): self._validate_user(token) # ...
BankAccount з попередньої вправи ми можемо захотіти стежити, щоб баланс рахунку ніколи не падав нижче нуля. Ми могли би зробити це, зробивши balance приватним, а також повертаючи його значення методом get_balance, а в методі withdraw — контролюючи стан рахунку.class Score: points = 0 print(Score.points) # 0 Score.points = 1 print(Score.points) # 1
score1.points, то отримуємо значення змінної класу, а коли вдруге — об’єктну змінну.class Score: points = 0 score1 = Score() print(score1.points) # 0 score1.points = 10 print(score1.points) # 10
score1 = Score() score1.points = 10 score2 = Score() score3 = Score() print(score1.points) # 10 print(score2.points) # 0 print(score3.points) # 0 Score.points = 2 print(score1.points) # 10 print(score2.points) # 2 print(score3.points) # 2
class TaxCalculator: VAT = 0.23 # ...

Direction зі змінними, які відповідатимуть за окремі напрямки. Ці змінні можна було б визначити інакше, але такий спосіб забезпечує нам чіткість.class Direction: UP = 1 DOWN = 2 LEFT = 3 RIGHT = 4 # Приклад використання direction = Direction.UP if direction == Direction.UP: direction = Direction.DOWN
self. Ми також повинні ставити перед ними @staticmethod. Ми можемо викликати ці методи в класі, вони не потребують об’єкта.class Counter: num = 0 def __init__(self): print("Створюю") Counter.num += 1 @staticmethod def print_counter(): print(f"Створено {Counter.num}") c1 = Counter() # Створюю c2 = Counter() # Створюю c3 = Counter() # Створюю Counter.print_counter() # Створено 3
type, яка повертає об’єкт, що називається типом. Ми вже познайомилися із типами в розділі Основні значення, де розглянули str, int, float і bool. Назви класів — це також типи, тому ми можемо перевірити, чи об’єкт створено за допомогою класу Cookie, порівнюючи його тип із Cookie. Типи порівнюються за допомогою слова is. Ми вже познайомилися з ним, обговорюючи значення None у розділі Змінні. Якщо ми хочемо перевірити, чи типи відрізняються одне від одного, ми використовуємо is not.class Cookie: pass c = Cookie() print(type(c)) # <class ‘__main__.Cookie’> print(type(c) is Cookie) # True print(type(c) is not Cookie) # False print(type(c) is int) # False print(type(c).__name__) # Cookie
str, який використовується для створення рядків. Назва str не дуже типова для класів, але врешті-решт рядок — це особливе значення. Його конструктор дозволяє перетворювати об’єкти іншого типу в об’єкт класу str[^201_3].str1 = "AAA" print(type(str1)) # <class ‘str’> i = 10 print(type(i)) # <class ‘int’> str2 = str(i) print(type(str2)) # <class ‘str’>
b = True print(type(b)) # <class ‘bool’> str3 = str(b) print(type(str3)) # <class ‘str’>
print об’єкт, який має інший тип, ніж str, він замінюється за допомогою конструктора. Він також використовується f-рядками, наприклад, у нещодавно використаному f"Створено {Counter.num}".str визначає певні методи, які ми можемо викликати для будь-якого об’єкта типу str. Ось найважливіші з них:upperповертає текст із перетворенням усіх малих літер на великі;lowerповертає текст із перетворенням усіх великих літер на малі;capitalizeповертає текст, у якому перша літера замінюється великою;titleповертає текст, у якому перші літери кожного слова замінюються на великі;replaceповертає текст із заміною всіх повторень одного слова на інше.
name = "dOmInIkA sito" print(name.upper()) # DOMINIKA SITO print(name.lower()) # dominika sito print(name.capitalize()) # Dominika sito print(name.title()) # Dominika Sito text = "Привіт, {name}, пишу тобі" new_text = text.replace("{name}", "Міхал") print(new_text) # Привіт, Міхал, пишу тобі new_text = new_text.replace("тобі", "Тобі") print(new_text) # Привіт, Міхал, пишу Тобі
[^201_2]: Елемент — це поняття, яке включає класи, змінні та функції.
[^201_3]: Як ми переконаємося в розділі Оператори, це робиться за допомогою спеціального методу
__str__.