Что такое методы в Python
Ваня — ученик 4А класса. Ваня очень любит печеньки.
У строк есть методы (см. методы строк). Воспользуемся методом .replace() :
Код
print("Ваня — ученик 4А класса. Ваня очень любит печеньки.".replace("Ваня", "Игорь"))
Игорь — ученик 4А класса. Игорь очень любит печеньки.
В строке про Ваню его имя заменилось на “Игорь”.
Давайте разбираться
Методы похожи на функции. Они тоже пишутся со скобочками и в них тоже передаются аргументы. Отличаются они тем, что привязаны к объекту, для которого вызываются. В примере выше .replace() привязан к строке «Ваня — ученик 4А класса. Ваня очень любит печеньки.» . Он заменил в этой строке все кусочки, где написано “Ваня” на “Игорь”.
Методы придумали для того, чтобы привязывать функции к типу данных. Вы уже работали со строками и числами. Забегая вперёд, есть и другие типы данных: списки, множества, даже картинки! Функция замены кусочков строки на другие нужна только для строк, с числами такое не делают. Функция округления нужна только для чисел, строку нельзя “округлить”. Чтобы не гадать какая функция для каких типов данных — придумали методы, привязанные к этим типам точкой.
Если всё ещё не понятно:
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Python: Методы как выражения
Методы — такие же выражения, как переменные или вызовы функции, значит, их можно по-разному комбинировать.
Например, использовать в операциях:
name = 'Shaya' 'hi, ' + name.upper() + '!' # hi, SHAYA!
Или использовать в параметрах функций:
name = 'robb' print(name.lower()) # => robb num1 = 5 num2 = 30 # bit_length() — вычисляет количество бит, необходимых для представления числа в двоичном виде print(num1.bit_length() + num2.bit_length()) # => 8
Задание
Найдите символы N и , (запятая) внутри текста в переменной text . Выведите на экран их индексы. Ожидаемый тестами вывод:
Index Of N: 0 Index Of ,: 25
Ваша задача найти эти индексы в строке с помощью метода .find() и вставить в print() , не используя промежуточные переменные. Это упражнение можно решить как при помощи интерполяции, так и при помощи конкатенации. Если вы используете конкатенацию, то полученный результат необходимо привести к строковому типу. Для разбиения вывода на две строки, вам может понадобится \n .
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
- Метод — это функция или процедура, принадлежащая какому-то классу или объекту.
Методы — Python: Введение в ООП
Имена атрибутов класса могут указывать на функции. Такие функции называются методами. Вы уже сталкивались с методами, когда работали со встроенными структурами данных. Давайте же объявим класс и метод в нем:
class C: def add(x, y): return x + y C.add # C.add(4, 5) # 9
Здесь C.add — обычная функция, о чем нам и говорит интерпретатор. Но сами по себе обычные функции, помещенные в класс не так интересны: те же функции мы можем группировать и в модулях. Более того, обычные функции стоит объявлять именно в модулях.
Методы же нужны для того, чтобы работать с данными объектов класса. Но для этого методы должны быть связаны (bound).
Связанные методы
Вспомните, метод list.append ( list — это класс, помним и это) модифицирует именно объект списка. Посмотрим на этот метод поближе:
l = [] list.append(l, 42) l # [42]
Я вызвал метод класса, как обычную функцию и передал первым аргументом объект списка. Метод изменил переданный список. Но ведь раньше мы вызывали этот метод в виде l.append(42) ! Так вот l.append это связанная версия метода list.append : метод связан с конкретным объектом списка и знает, что именно его он должен модифицировать!
Определим класс с атрибутом и методом, затем получим экземпляр класса и посмотрим на вывод REPL для разных версий метода (связанной и не связанной):
class Foo: def bar(): pass x = Foo() x # Foo.bar # x.bar # >
Foo.bar — это не связанный метод, то есть обычная функция. А вот x.bar уже связан («bound») с объектом x : обратите внимание на одну и ту же строку » » — так Python отображает объект x .
Но как метод получает доступ к связанному объекту, спросите вы? В Python методы получают ссылку на связанный объект в качестве первого аргумента. А называть этот аргумент принято именем «self». Вот пример метода, использующего данные объекта:
class Person: name = 'Noname' def greet(self): print('Hello, ' + self.name + '!') bob = Person() bob.name = 'Bob' bob.greet() # => Hello, Bob! alice = Person() alice.greet() # => Hello, Noname!
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как найти методы объекта в Python
Часто в процессе работы с Python возникает необходимость узнать, какие методы доступны для какого-то конкретного объекта. Это может быть полезно, если вы работаете с новым или незнакомым объектом, и вам нужно узнать, какие функции вы можете использовать.
Возможен и другой сценарий: например, вы знаете имя метода, но не уверены, существует ли он для данного объекта. В этом случае вы захотите проверить наличие метода, прежде чем вызывать его, чтобы избежать возможных ошибок.
Для обоих этих задач в Python существуют простые и эффективные решения.
Нахождение всех методов объекта
В Python есть встроенная функция dir() , которая возвращает список атрибутов и методов для любого объекта. Вот пример ее использования:
# Создание объекта класса list my_object = list() # Получение списка всех методов и атрибутов этого объекта methods = dir(my_object) # Вывод списка print(methods)
В результате выполнения этого кода будет выведен список всех методов и атрибутов объекта list .
Проверка наличия метода у объекта
Если вам нужно проверить, есть ли у объекта конкретный метод, вы можете воспользоваться функцией hasattr() . Она принимает два аргумента: объект и строку, содержащую имя атрибута или метода, который нужно проверить.
Вот пример использования этой функции:
# Создание объекта класса list my_object = list() # Проверка наличия метода append у объекта has_method = hasattr(my_object, 'append') # Вывод результата print(has_method)
Если метод append существует у объекта my_object , то функция hasattr() вернет True , иначе — False .
Таким образом, с помощью функций dir() и hasattr() можно легко найти все методы объекта или проверить наличие конкретного метода.
