Какова разница между функцией и методом в программировании?

Ответ

В программировании, особенно в контексте объектно-ориентированного программирования (ООП), метод — это специализированный тип функции. Основное различие заключается в их принадлежности и способе вызова.

  • Функция:

    • Это независимый блок кода, который выполняет определенную задачу.
    • Она определяется вне класса и может быть вызвана напрямую по имени.
    • Не имеет прямого доступа к состоянию какого-либо конкретного объекта, если только это состояние не передано ей явно как аргумент.
    • Пример (Python):

      def calculate_sum(a, b):
          return a + b
      
      result = calculate_sum(5, 3) # Вызов функции
  • Метод:

    • Это функция, которая принадлежит классу и определяется внутри него.
    • Вызывается через объект (экземпляр класса) с использованием точечной нотации (object.method()).
    • Имеет неявный первый аргумент (часто называемый self в Python или this в других языках), который ссылается на экземпляр объекта, через который был вызван метод. Это дает методу доступ к данным (атрибутам) этого объекта.
    • Назначение: Методы предназначены для выполнения действий, связанных с состоянием объекта, или для изменения этого состояния. Они обеспечивают инкапсуляцию поведения объекта.
    • Пример (Python):

      class Calculator:
          def __init__(self, initial_value=0):
              self.value = initial_value
      
          def add(self, number): # 'add' - это метод
              self.value += number
              return self.value
      
      my_calc = Calculator(10)
      current_value = my_calc.add(5) # Вызов метода через объект

Ключевые отличия:

  1. Принадлежность: Функция независима; метод принадлежит классу/объекту.
  2. Вызов: Функция вызывается напрямую; метод — через объект.
  3. Доступ к состоянию: Метод имеет неявный доступ к состоянию объекта (self/this); функция — нет (если не передано явно).
  4. Назначение: Функции выполняют общие задачи; методы определяют поведение объекта и взаимодействуют с его данными.

Ответ 18+ 🔞

Давай разберём эту хуйню, про которую все так умно говорят, а на деле всё просто, как три рубля. Функция и метод — это как близнецы, но один живёт у мамы в деревне, а другой в Москве в апартаментах. Вроде похожи, а контекст — пиздец какой разный.

Смотри, функция — это как твой свободный художник, блядь. Отвязанный такой кусок кода, который гуляет сам по себе. Сказали ему — сложи два числа, он сложил. Сказали — выведи на экран «Привет, мудак!», он вывел. Ни к кому не привязан, живёт своей жизнью. Вызвал по имени — и всё, работает.

def посчитать_пиздюлей(от_кого, кому):
    return от_кого + кому * 2

итог = посчитать_пиздюлей(5, 3) # Просто вызвал и всё

А вот метод — это уже не вольная птица, а прикормленный голубь, который сидит на конкретном объекте, блядь. Он ВНУТРИ класса живёт. И чтобы его позвать, нужно обратиться к хозяину — к объекту. И главная фишка — у него есть секретный пропуск, эта хуйня self (или this в других языках). Этот self — и есть ссылка на самого объект, который его вызвал. То есть метод может лезть во внутренности объекта и там всё менять, как у себя дома.

class ПьяныйМужик:
    def __init__(self, имя, уровень_алкоголя=0):
        self.имя = имя
        self.уровень_алкоголя = уровень_алкоголя # Это его внутреннее состояние, блядь

    def выпить(self, стопок): # Вот это метод, ёпта!
        self.уровень_алкоголя += стопок
        if self.уровень_алкоголя > 5:
            return f"{self.имя} говорит: 'Пошло всё нахуй!'"
        return f"{self.имя} ещё более-менее..."

вася = ПьяныйМужик("Вася", 2)
состояние_васи = вася.выпить(4) # Вызвал метод ЧЕРЕЗ объект 'вася'

И вот в чём, сука, соль:

  1. Где живёт. Функция — сама по себе, на воле. Метод — внутри класса, как в клетке, но золотой.
  2. Как позвать. Функцию — по имени. Метод — через объект: объект.метод(). Без объекта — нихуя не выйдет, он обидится.
  3. Доступ к барахлу. У метода есть этот самый self, через который он может трогать все внутренние атрибуты объекта (self.уровень_алкоголя). Функция же — слепая, ей нужно всё в руки передавать явно.
  4. Зачем это всё. Функция делает что-то общее. Метод описывает, что конкретный объект УМЕЕТ ДЕЛАТЬ со своими данными. Он определяет его поведение, его повадки, блядь.

Короче, если видишь вызов через точку — это почти наверняка метод. Если просто имя — функция. А если ни то, ни сё — это, наверное, какой-нибудь декоратор, но это уже другая история, ебать её в сраку.