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

Bismar

Новичок
Пользователь
Окт 8, 2023
11
1
3
Здравствуйте!
Допустим мы создали класс в котором есть функции. Почему когда мы вызываем функцию от самого класса то это функция, а когда от экземпляра класса то это метод?

Операционная система: Windows
Версия Питон: 3.10
 
  • Мне нравится
Реакции: rebrikon

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
Здравствуйте!
Допустим мы создали класс в котором есть функции. Почему когда мы вызываем функцию от самого класса то это функция, а когда от экземпляра класса то это метод?

Операционная система: Windows
Версия Питон: 3.10
и там и там это методы

Функция - подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура - подпрограмма, которая только выполняет операции, без возврата значения.
Метод - это функция или процедура, которая принадлежит классу или экземпляру класса.
 

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
5
1
3
В Python терминология "метод" и "функция" используется для различения между функциями, которые определены внутри класса, и обычными функциями, не привязанными к классу. Основное различие между методом и функцией в контексте классов заключается в том, как они вызываются и как им передаются данные.

  1. Методы: Когда функция определена внутри класса и вызывается от экземпляра этого класса, она называется методом. Метод автоматически получает первым аргументом сам экземпляр, от которого он был вызван. Этот аргумент обычно называется self в Python. Таким образом, метод "знает" об экземпляре, с которым он ассоциирован, и может взаимодействовать с его атрибутами и другими методами.
  2. Функции: Когда вы определяете функцию вне какого-либо класса, она называется просто функцией. Она не привязана к экземпляру класса и работает независимо. Однако, если вы вызовете функцию, определённую внутри класса, непосредственно от самого класса, а не от его экземпляра, она не получит экземпляр класса (self) автоматически в качестве первого аргумента. В таком случае, это будет похоже на обычный вызов функции, и вы должны будете явно передать экземпляр, если функция ожидает self как первый аргумент.

Python:
class MyClass:
    def method(self):
        return "вызван метод экземпляра"

    @staticmethod
    def static_method():
        return "вызвана статическая функция"

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

# Вызов метода от экземпляра
print(obj.method())  # "вызван метод экземпляра", self передаётся автоматически

# Вызов метода непосредственно от класса
# print(MyClass.method())  # Это вызовет ошибку, так как не передан аргумент 'self'

# Вызов статической функции непосредственно от класса
print(MyClass.static_method())  # "вызвана статическая функция", не требует экземпляра

# Вызов статической функции от экземпляра
print(obj.static_method())  # "вызвана статическая функция", работает так же, как и от класса

Важно понимать разницу между вызовом функции от класса и вызовом метода от экземпляра класса, так как она влияет на то, как функция взаимодействует с данными класса и его экземпляров.
 

Форум IT Специалистов