Начало работы. Объектно-ориентированное программирование, или ООП, — это парадигма программирования, в которой можно структурировать программы таким образом, чтобы свойства и поведение объединялись в объекты и их взаимодействия.
Например, объект может представлять собой круг со свойством радиуса, с такими поведениями, как вычисление площади, вычисление окружности, вычисление объема и т. д. Или электронное письмо со свойствами, такими как список получателей, тема, тело и т. д., и поведением, таким как добавление вложений. и отправка.
Объектно-ориентированное программирование — это подход к моделированию конкретных вещей реального мира, таких как автомобили, а также отношений между такими вещами, как компании и сотрудники, студенты и учителя и т. д. ООП моделирует объекты реального мира как программные объекты, с которыми связаны некоторые данные, или атрибуты, с ними и могут выполнять определенные функции или методы. Класс — это экземпляр объекта.
id и Type
id() — это встроенная функция, которая дает нам возможность проверить уникальный идентификатор объекта или личность или его адрес в памяти. «Эта идентичность должна быть уникальной и постоянной для данного объекта в течение времени жизни, если два объекта с непересекающимся временем жизни могут иметь одинаковый id()», . Мы обсудим это позже.
Возьмем пример со строковым объявлением:
>>> str1 = "geek" >>> print(id(str1)) >>> print(type(str1)) 2544105195536 <class 'str'>
В этом случае идентификатор переменной str1
равен 2544105195536
. Это значение зависит от архитектуры, в которой работает интерпретатор Python.
Тип объекта — это, ну… его тип. Чтобы проверить тип объекта, мы можем передать его функции type()
. Давайте посмотрим на нашу переменную str
:
>>> type(str1) <class 'str'>
Здесь мы видим, что функция возвращает не просто str, как ожидалось, а class ‘str’
. В Python нет встроенных типов данных, как в C или других языках программирования. Типы на самом деле являются классами, и каждая переменная является экземпляром соответствующего класса. Итак, в нашем случае str
является экземпляром класса str
.
Примечание. оператор is
отличается от оператора ==
. Первый оценивает, указывают ли два имени на один и тот же объект в памяти, а второй оценивает, имеют ли они одинаковое значение.
Изменяемые объекты
Изменяемые объекты в Python — это объекты, которые можно изменить. Например, списки, наборы и словари могут изменяться.
Посмотрите:
>>> color = ["Holberton", "School", "Eterna primavera"] >>> print(color) >>> color[0] = "Cali" >>> color[-1] = "Bogota" >>> print(color) ['Holberton', 'School', 'Eterna primavera'] ['Cali', 'School', 'Bogota']
Неизменяемые объекты
Это встроенные типы, такие как int, float, bool, string, unicode, tuple. Проще говоря, неизменяемый объект нельзя изменить после его создания.
Например:
>>> tuple1 = (0, 1, 2, 3) >>> tuple1[0] = 4 >>> print(tuple1) TypeError: 'tuple' object does not support item assignment
Как Python их обрабатывает и почему это важно:
Доступ к неизменяемым объектам быстрее, а их изменение обходится дорого, поскольку требует создания копии. тогда как изменяемые объекты легко изменить. Изменяемые объекты рекомендуются там, где есть необходимость изменить размер содержимого объекта.
Примечание. Кортеж состоит из строки и списка. Строки неизменяемы, поэтому мы не можем изменить их значение. Но содержимое списка может измениться. Сам кортеж не является изменяемым, но содержит изменяемые элементы.
Как аргументы передаются функциям и что это означает для изменяемых и неизменяемых объектов
В языке программирования C передача аргументов функции работает примерно так же, как указатели, и это поведение похоже на python. Переменные в Python хранят адрес (или идентификатор) объекта, на который они ссылаются.
При этом аргумент передается по ссылке в функцию. Это означает, что мы фактически не передаем объекты функциям, мы передаем им ссылки . В общем случае функция работает следующим образом: она имеет имя и либо принимает аргументы, либо не принимает их, выполняет блок операторов и завершает работу. Поэтому, когда мы передаем аргументы, он показывает различное поведение в зависимости от изменчивости объекта, на который ссылается аргумент.
Изменяемый:
>>> def increment(n): ... n.append([4])>>> L = [1, 2, 3] >>> increment(L) >>> print(L) L = [1, 2, 3, 4] # a changed!
Неизменяемый:
>>> def increment(n): ... n += 1>>> a = 3 >>> increment(a) >>> print(a) a = 3 # a is still referring to the same object
Магия сложных предметов
Давайте рассмотрим пример того, как можно изменить изменяемый объект. В этом случае, если они содержат изменяемые объекты, мы можем изменить значение этих объектов.
А с помощью Соединения можно связать все элементы в кортеже в строку, используя символ решетки в качестве разделителя в этом кейс ", ":
#!/usr/bin/python3 def magic_string(lstr=[]): lstr.append("Holberton") return ", ".join(lstr)