Чем метод отличается от функции в Python?
Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является self
, то она становится связанным методом bound method
, получившим доступ к атрибутам связанного объекта (экземпляра класса).
# Обычная функция:
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
В Python методы и функции имеют некоторые ключевые различия, которые важно понимать.
Функции в Python:
Функции в Python - это блок кода, который выполняет определенную задачу при вызове.
- Функции могут быть определены с помощью ключевого слова def.
- Они могут принимать аргументы и возвращать значения с помощью return.
- Функции могут вызываться независимо от какого-либо объекта.
Пример функции в Python:
def add_numbers(a, b):
return a + b
result = add_numbers(5, 3)
print(result)
Методы в Python:
Методы - это функции, связанные с объектами. Они вызываются на конкретных объектах и могут изменять состояние объекта.
- Методы определяются внутри классов и могут обращаться к данным объекта через ключевое слово self.
- Методы могут выполнять операции над данными объекта.
Пример метода в Python:
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 заключается в том, что методы связаны с объектами и могут изменять их состояние, в то время как функции независимы от объектов.
В отличие от функции, метод узко специализирован и может быть применен только к объектам, которые его поддерживают. Например, метод списков append()
может быть применен только к ним. Применение данного метода к другим объектам, которые его не поддерживают (строки или кортежи) вызовет ошибку. Но есть и такие методы, которые хорошо работают с несколькими типами объектов, например метод count()
может применяться к строкам, спискам или кортежам