generated from hexlet-basics/exercises-template
-
Notifications
You must be signed in to change notification settings - Fork 3
/
description.ru.yml
95 lines (65 loc) · 5.78 KB
/
description.ru.yml
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
---
name: Объекты
theory: |
У данных, которыми мы оперируем в программах, есть важные атрибуты. В Python они встроены прямо в язык. Еще у данных есть методы — функции внутри свойств. Свойства и методы — такие же выражения, как переменные или вызовы функции. Все это можно по-разному комбинировать. В этом уроке изучим их основы.
В программировании мы оперируем данными, создаем числа и строки, выполняем над ними различные операции и используем полученный результат. Чтобы выполнить операцию, мы применяем либо операторы, либо функции:
```python
# Сложение с помощью оператора +
1 + 3 # 4
# Подсчет длины с помощью функции len()
name = 'Hexlet'
len(name) # 6
```
В примере выше есть четкое разделение: данные отдельно, функции отдельно. Но это не единственный способ организации кода. В Python наравне с таким разделением, используется и другой подход — **объектно-ориентированный (ОО)**.
Объектно-ориентированный код строится на объединении данных и функций в одну сущность — **объект**. Данные в таком случае называются атрибутами, а функции — методами.
Так это выглядит:
```python
name = 'Hexlet'
# Метод upper()
upper_name = name.upper()
print(upper_name) # => 'HEXLET'
```
Строки в Python — это объекты. В примере выше мы вызываем метод, то есть функцию, которая связана со строкой. Вызов происходит через точку, которая идет сразу за именем переменной. В остальном методы работают как обычные функции.
Также вызов можно делать и напрямую:
```python
'Hexlet'.upper() # 'HEXLET'
```
В строки встроено много методов, которые постоянно нужны разработчику. Посмотреть их список можно в [документации](https://python.readthedocs.io/en/latest/library/stdtypes.html#string-methods). Вот несколько полезных примеров:
```python
name = 'Python'
# Возвращает индекс первого вхождения буквы в строку
name.find('t') # 2
# Переводит в нижний регистр
name.lower() # 'python'
# Заменяет одну подстроку другой
name.replace('on', 'off') # 'Pythoff'
```
То же самое касается чисел и остальных типов данных, которые мы пока не изучали. Можно сказать, что в Python почти все — объекты:
```python
x = -5
# Возвращает модуль числа
# Имя выглядит странно, но это действительно имя метода
x.__abs__()
```
В примере выше есть имя метода с двумя подчеркиваниями в начале и в конце. В Python так называют методы, которые не предназначены для прямого вызова. Для них создали функции, которые внутри себя уже сами вызывают методы:
```python
x = -5
abs(x) # вызывает x.__abs__()
# -5 в 3 степени
pow(x, 3) # вызывает x.__pow__(3)
```
Создатель Python [решил](https://stackoverflow.com/questions/83983/why-isnt-the-len-function-inherited-by-dictionaries-and-lists-in-python), что будет нагляднее, если математические или похожие на математические операции выразить функциями. Он хотел, чтобы такие функции воспринимались как операции, типа сложения или вычитания. Так привычнее для тех, кто изучал математику.
Так же работает и функция `len()`:
```python
len('Hexlet') # Вызывает 'Hexlet'.__len__()
```
Кроме методов у объектов есть атрибуты, но у встроенных в Python объектов их мало. Например, атрибут `__doc__`, который возвращает документацию функции. Поэтому функции тоже считаются объектами:
```python
len.__doc__ # 'Return the number of items in a container.'
```
Атрибуты работают и выглядят как переменные, только указываются через точку после объекта.
instructions: |
Приведите строку `text` к нижнему регистру и напечатайте её на экран. Пример метода, выполняющего эту задачу приведен в теории.
tips:
- |
[Методы строк](https://python.readthedocs.io/en/latest/library/stdtypes.html#string-methods)