---
title: Классы и объекты
seo:
  title: Классы и объекты — Data Analyst
  description: "Тема «Классы и объекты» для собеседования Data Analyst. Определите класс car с двумя атрибутами: color и speed. Затем создайте экземпляр и верните speed. В чем разница между методами экземпляра, класса и статическими методами в Python?"
---

[Все темы Data Analyst](/data-analyst)

## <strong>Определите класс</strong> <code>car</code> <strong>с двумя атрибутами&#58;</strong> <code>color</code> <strong>и</strong> <code>speed</code><strong>. Затем создайте экземпляр и верните</strong> <code>speed</code> [#q-14bee738d69b81ccb024d14c52ec0c43]

<strong>Решение&#58;</strong>

```python
class Car:
    def __init__(self, color, speed):
        self.color = color
        self.speed = speed

# Создаем экземпляр класса Car
my_car = Car('red', 120)

# Возвращаем атрибут speed
print(my_car.speed)  # 120
```

:::note[Ссылки для изучения]

1. [Объектная модель Python](https://education.yandex.ru/handbook/python/article/obuektnaya-model-python-klassy-polya-i-metody)
   :::

---

## <strong>В чем разница между методами экземпляра, класса и статическими методами в Python?</strong> [#q-14bee738d69b818d8447f9e28ca59f2d]

Методы в Python могут быть методами экземпляра, класса или статическими методами. Вот их различия&#58;

{/* prettier-ignore */}
1. <strong>Методы экземпляра</strong>&#58;

    - Определяются с первым параметром <code>self</code>.

    - <code>self</code> ссылается на экземпляр класса.

    - Могут изменять состояние экземпляра.

    ```python
    class MyClass:
        def instance_method(self):
            return 'instance method called', self
    ```

1. <strong>Методы класса</strong>&#58;

    - Определяются с первым параметром <code>cls</code>.

    - <code>cls</code> ссылается на сам класс.

    - Используют декоратор <code>&#64;classmethod</code>.

    - Могут изменять состояние класса.

    ```python
    class MyClass:
        @classmethod
        def class_method(cls):
            return 'class method called', cls
    ```

1. <strong>Статические методы</strong>&#58;

    - Не принимают ни <code>self</code>, ни <code>cls</code>.

    - Используют декоратор <code>&#64;staticmethod</code>.

    - Не получают класс или экземпляр автоматически. Если передать объект явно или обратиться к классу по имени, статический метод может менять доступное ему состояние.

    ```python
    class MyClass:
        @staticmethod
        def static_method():
            return 'static method called'
    ```

:::note[Ссылки для изучения]

1. [Объектная модель Python](https://education.yandex.ru/handbook/python/article/obuektnaya-model-python-klassy-polya-i-metody)
   :::

---

## <strong>Что означает</strong> <code>self</code> <strong>в классе?</strong> [#q-14bee738d69b817f9f7dd245eafce0d0]

self является общепринятым именем первого параметра метода экземпляра, а не ключевым словом Python. При вызове через экземпляр в этот параметр автоматически передаётся сам экземпляр.

Когда вызывается метод экземпляра, Python автоматически передает <code>self</code> в качестве первого аргумента. Это позволяет методу получать доступ к данным, определенным в экземпляре класса, и взаимодействовать с ними.

Пример использования <code>self</code> в методе экземпляра&#58;

```python
class MyClass:
    def __init__(self, x):
        self.x = x

    def display(self):
        print(f"Value of x is: {self.x}")

# Создание экземпляра класса
obj = MyClass(42)

# Вызов метода экземпляра с использованием self
obj.display()  # Вывод: Value of x is: 42
```

Таким образом, <code>self</code> обеспечивает контекст, в котором методы класса могут оперировать с данными, принадлежащими конкретному экземпляру этого класса.

:::note[Ссылки для изучения]

1. [Объектная модель Python](https://education.yandex.ru/handbook/python/article/obuektnaya-model-python-klassy-polya-i-metody)
   :::

---

## <strong>Как реализуется наследование классов в Python?</strong> [#q-14bee738d69b8116ab95c9f785c982bb]

В Python наследование классов реализуется путем создания нового класса на основе уже существующего (родительского) класса. Новый класс (потомок) получает доступ к атрибутам и методам родительского класса, что позволяет повторно использовать код и расширять функциональность.

Основные моменты наследования классов в Python&#58;

1. <strong>Определение класса-потомка</strong>&#58;

   ```python
   class ParentClass:
       # Код родительского класса

   class ChildClass(ParentClass):
       # Код потомка, который наследует от ParentClass
   ```

1. <strong>Доступ к методам и атрибутам родительского класса</strong>&#58;
   Потомок может использовать методы и атрибуты родительского класса, вызывая их
   через <code>super&#40;&#41;</code> или непосредственно.

1. <strong>Переопределение методов</strong>&#58; Потомок может переопределить
   методы родительского класса, чтобы изменить или дополнить их поведение.

Пример&#58;

```python
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# Создаем экземпляры классов-потомков
dog = Dog("Buddy")
cat = Cat("Whiskers")

# Вызываем методы, унаследованные от родительского класса Animal
print(dog.speak())  # Вывод: Buddy says Woof!
print(cat.speak())  # Вывод: Whiskers says Meow!
```

:::note[Ссылки для изучения]

1. [Объектная модель Python](https://education.yandex.ru/handbook/python/article/obuektnaya-model-python-klassy-polya-i-metody)
   :::
