Python - Классы и объекты
Привет, стремящиеся к знаниям программисты Python! Сегодня мы отправляемся в захватывающее путешествие в мир Ориентированного на Объекты Программирования (ООП) в Python. Защелкните ремни, потому что мы собираемся изменить ваше мышление о коде!
Что такое класс в Python?
Представьте себе, что вы строите виртуальный зоопарк. Вы бы не создавали каждое животное с нуля, правильно? Вот тут и приходят на помощь классы!
Класс в Python — это что-то вроде чертежа или шаблона для создания объектов. Он определяет набор атрибутов и методов, которые будут иметь объекты этого класса.
Создадим простой класс, представляющий собаку:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} говорит Уф!")
В этом примере Dog
— это наш класс. У него есть атрибуты, такие как name
и breed
, и метод, называемый bark()
.
Создание классов в Python
Создание класса заключается в использовании ключевого слова class
, за которым следует имя класса. Создадим более детализированный класс Car
:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def drive(self, distance):
self.odometer += distance
print(f"Проехал {distance} миль. Итого: {self.odometer} миль")
def honk(self):
print("Бип-бип!")
Здесь __init__
— это специальный метод, называемый конструктором. Он вызывается, когда мы создаем новый объект этого класса.
Что такое объект?
Если класс — это чертеж, объект — это реальное "вещество", созданное из этого чертежа. Это конкретный экземпляр класса.
Создание объектов классов в Python
Создание объекта (также называемое инстанцированием) — это как использование нашего чертежа для создания чего-то реального. Создадим несколько машин:
my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)
print(my_car.make) # Вывод: Toyota
your_car.drive(50) # Вывод: Проехал 50 миль. Итого: 50 миль
my_car.honk() # Вывод: Бип-бип!
Каждая машина — это отдельный объект с своим набором атрибутов и методов.
Доступ к атрибутам объектов в Python
Мы можем получить доступ к атрибутам объекта, используя точечную нотацию. Рассмотрим нашу машину:
print(f"Моя машина — это {my_car.year} {my_car.make} {my_car.model}")
# Вывод: Моя машина — это 2020 Toyota Corolla
Встроенные атрибуты классов в Python
Классы Python имеют некоторые встроенные атрибуты. Рассмотрим их:
class MyClass:
x = 5
print(MyClass.__name__) # Вывод: MyClass
print(MyClass.__module__) # Вывод: __main__
print(MyClass.__dict__) # Вывод: {'__module__': '__main__', 'x': 5, ...}
Встроенные классы Python данных
Знаете ли вы, что даже базовые типы данных Python являются объектами? Проверим это:
print(type(5)) # Вывод: <class 'int'>
print(type("Hello")) # Вывод: <class 'str'>
print(type([1, 2, 3])) # Вывод: <class 'list'>
Все в Python — это объекты!
Утилизация памяти (уничтожение объектов) в Python
В Python нам не нужно вручную уничтожать объекты. Сборщик мусора Python автоматически заботится об этом, когда объект больше не используется.
import gc
# Создайте объект
my_car = Car("Toyota", "Corolla", 2020)
# Удалите ссылку
my_car = None
# Принудительная утилизация памяти (обычно не требуется)
gc.collect()
Скрытие данных в Python
В ООП мы часто хотим контролировать доступ к определенным атрибутам. Python использует конвенцию префиксации атрибутов подчеркиваниями:
class BankAccount:
def __init__(self, balance):
self._balance = balance # Защищенный атрибут
self.__secret = "shh" # Приватный атрибут
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
print(account._balance) # Вывод: 1000 (но это не рекомендуется!)
print(account.__secret) # Это вызовет исключение AttributeError
Вот таблица, подводящая итог методам, которые мы обсудили:
Метод | Описание |
---|---|
__init__(self, ...) |
Конструктор, вызывается при создании нового объекта |
__str__(self) |
Возвращает строковое представление объекта |
__repr__(self) |
Возвращает детализированное строковое представление объекта |
__len__(self) |
Определяет поведение встроенной функции len()
|
__getitem__(self, key) |
Определяет поведение индексирования |
__setitem__(self, key, value) |
Определяет поведение назначения значений индексированным |
И вот и все! Вы только что сделали свои первые шаги в мир Ориентированного на Объекты Программирования в Python. Помните, что практика совершенства. Попробуйте создать свои собственные классы и объекты, и скоро вы будете строить сложные и эффективные программы как профессионал!
Credits: Image by storyset