Задать вопрос
hardy_99
@hardy_99
Python developer

Когда надо использовать инстанс методы и когда класс методы?

Речь не идет про сокрытие, оставим это в стороне.

Недавно задался вопросом. Например есть обычный класс:
6561d80c5c871732581589.png

А ведь практически все инстанс методы (объекта) можно:
Переписать класс и даже статическими методами и оставить лишь один инстанс метод main
6561d8674e79b453138951.png
6561d89970c90945452064.png

Или вообще оставить это другому классу. То есть в любом случае твой класс будет иметь данный метод и не важно это метод объекта, класс метод, или статитический.

Так когда надо методы объекта (инстанс методы) использовать, и каково их предназначение? Есть ли какой-то принцип?

Заранее спасибо.
  • Вопрос задан
  • 193 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Maksim_64
@Maksim_64
Data Analyst
Ты не совсем понял их назначение.

В python у тебя есть атрибуты класса и атрибуты экземпляра класса. Атрибутами называют как методы так и атрибуты в обычном смысле.

1. Методы экземпляра класса, имеют доступ, и могут изменять, как атрибуты класса, так и атрибуты экземпляра класса.

2. Методы класса не имеют доступа к атрибутам экземпляра класса, как следствие не могут изменять его состояние.

3. Статические методы не имеют доступа к атрибутам, экземпляра класса или объекта класса. Обычная функция которая "привязана к классу" для внутренних нужд.

Если говорить о применении методов класса, то самое основное это создание альтернативного конструктора.

class MyClass:

    def __init__(self, items):
        self.items = items
        initial_total_value = self.total()

    def total(self):
        return sum(self.items)

    @classmethod
    def from_str(cls, string):
        return cls([int(i) for i in string])
a = MyClass([1,2,3])
print(a.total())

b = MyClass.from_str('123')
print(b.total())
То есть смотри мой класс метод возвращает изменный объект класса, на котором без проблем сработает конструктор экземпляра класса.
Ответ написан
@Jack444
Через класоввые атрибуты и методы можно задать общие данные для всех машин которые неразумно сравнивать по отдельности, если делать возможным то нечем не будет отличатся от функционального програмирования, только потеряем в вызове метода в 5ятикратном размере. Через инстанцы можно сделать разные машины к примеру ламба и жигули и сравнивать их через операторы и условные выражения, вызов инстанцс методов в 2.5раза быстрее отрабатывает чем класс методы.
Вот пример можешь порешать, сделай класс генератор на вход принимает дистанцию, который считает время разгона авто и с каждым шагом отдаём время контрольной точки например километр. Сделай другой класс или функцию которая имитирует драгрейсинг и дай туда два инстанца разных авто с разными характеристиками и вычисли кто быстрее придёт к финишу и какое время будет у гонщиков.
Вот типо таких задач проще решаются через инстанцы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы