/
Вопросы и ответы
/
Python
/

Чем метод отличается от функции в Python?

Чем метод отличается от функции в Python?

4 года назад

Andrey Moshkov

Ответы

2

Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является self, то она становится связанным методом bound method, получившим доступ к атрибутам связанного объекта (экземпляра класса).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Обычная функция:
def greet(name):
    print(f'Hello, {name}')

class Person:
    # Инициализатор класса, требующий присваивать значение атрибута name при инстанцировании объекта
    def __init__(self, name):
        self.name = name

    # Связанный метод, имеющий доступ к атрибуту name:
    def greet(self):
        print(f'Hello , {self.name}!!!')


bob = Person('Bob')

# Вызов связанного метода класса:
bob.greet() # => Hello , Bob!!!

# Вызов функции, не имеющий доступа к атрибутам объекта:
greet(bob) # => Hello, <__main__.Person object at 0x7fadcfdf7d00>

# Вызов обычной функции, которой можно передать любое значение:
greet('Bob') # => Hello, Bob
greet(23) # => Hello, 23
greet('apple') # => Hello, apple

4 года назад

Карина Абдуллаева

1

В Python методы и функции имеют некоторые ключевые различия, которые важно понимать.

Функции в Python:

Функции в Python - это блок кода, который выполняет определенную задачу при вызове.

  • Функции могут быть определены с помощью ключевого слова def.
  • Они могут принимать аргументы и возвращать значения с помощью return.
  • Функции могут вызываться независимо от какого-либо объекта.

Пример функции в Python:

1
2
3
4
5
def add_numbers(a, b):
    return a + b

result = add_numbers(5, 3)
print(result)

Методы в Python:

Методы - это функции, связанные с объектами. Они вызываются на конкретных объектах и могут изменять состояние объекта.

  • Методы определяются внутри классов и могут обращаться к данным объекта через ключевое слово self.
  • Методы могут выполнять операции над данными объекта.

Пример метода в Python:

1
2
3
4
5
6
7
8
9
class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print("Привет, меня зовут", self.name)

person = Person("Alice")
person.greet() #=> Привет, меня зовут Alice

В примере функции add_numbers(a, b) мы определяем функцию для сложения двух чисел и возвращаем результат. Функция вызывается независимо от какого-либо объекта.

В примере метода greet(self) мы определяем метод greet внутри класса Person. Метод greet() используется для вывода приветствия с именем объекта Person. Метод вызывается на конкретном объекте person и обращается к его данным через self.

Различие между методами и функциями в Python заключается в том, что методы связаны с объектами и могут изменять их состояние, в то время как функции независимы от объектов.

3 года назад

Maksim Litvinov

1

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

4 года назад

Владимир Устянивский

0

Метод — функция, которая принадлежит объекту и вызывается через точку: text.upper(). Обычная функция существует сама по себе и получает данные через аргументы: len(text).

1
2
3
4
text = "привет"

print(len(text))      # функция: передаём строку аргументом
print(text.upper())   # метод: вызываем у самой строки

Главные отличия

ФункцияМетод
Где объявленав модуле, вне классавнутри класса
Как вызываютlen(text)text.upper()
Доступ к объектутолько к тому, что передалик объекту, у которого вызван, через self
Примерыlen(), print(), sorted()str.upper(), list.append(), dict.get()

Как это выглядит в своём коде

1
2
3
4
5
6
7
8
9
10
11
12
13
def area(width, height):          # функция
    return width * height

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):               # метод
        return self.width * self.height

print(area(3, 4))                 # => 12
print(Rectangle(3, 4).area())     # => 12

Функция получает размеры аргументами. Метод берёт их у объекта через self.

self — это объект, у которого вызван метод

Запись rect.area() Python выполняет как Rectangle.area(rect). Объект подставляется первым аргументом, поэтому у метода всегда есть параметр self:

1
2
3
rect = Rectangle(3, 4)
print(rect.area())             # => 12
print(Rectangle.area(rect))    # => 12 — то же самое

Одна задача: функция и метод

1
2
3
numbers = [3, 1, 2]
print(sorted(numbers))  # функция: возвращает новый список, исходный не меняет
numbers.sort()          # метод: сортирует сам список

Методы часто меняют объект, у которого вызваны. Функции чаще возвращают новый результат.

Как проверить, что перед вами

1
2
3
4
5
6
class C:
    def m(self):
        pass

print(type(C().m))  # => <class 'method'>
print(type(C.m))    # => <class 'function'>

Метод, взятый у объекта, Python называет bound method: он уже знает свой self.

Статические методы и методы класса

  • @staticmethod — функция внутри класса без self. Её кладут в класс для порядка.
  • @classmethod — получает первым аргументом сам класс cls. Так пишут альтернативные конструкторы: Date.from_string("2026-10-07").

Функции разбирают в бесплатном курсе «Основы Python», классы и методы — на курсе «ООП на Python».

16 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845