22.12.2023
Четвертый день обучения
Примеры методов:
__abs__
, __add__
, __and__
, __bool__
, __ceil__
, __class__
, __contains__
, __delattr__
, __delete__
, __dir__
, __divmod__
, __enter__
, __eq__
, __exit__
, __float__
, __floordiv__
, __format__
, __ge__
, __get__
, __getattribute__
, __getitem__
, __getnewargs__
, __gt__
, __hash__
, __iadd__
, __iand__
, __idivmod__
, __ifloordiv__
, __ilshift__
, __imatmul__
, __imod__
, __imul__
, __index__
, __init__
, __init_subclass__
, __instancecheck__
, __int__
, __invert__
, __ior__
, __ipow__
, __irshift__
, __isub__
, __iter__
, __itruediv__
, __ixor__
, __le__
, __len__
, __length_hint__
, __lshift__
, __lt__
, __matmul__
, __missing__
, __mod__
, __mul__
, __ne__
, __neg__
, __new__
, __next__
, __or__
, __pos__
, __pow__
, __prepare__
, __radd__
, __rand__
, __rdivmod__
, __reduce__
, __reduce_ex__
, __repr__
, __reversed__
, __rfloordiv__
, __rlshift__
, __rmatmul__
, __rmod__
, __rmul__
, __ror__
, __round__
, __rpow__
, __rrshift__
, __rshift__
, __rsub__
, __rtruediv__
, __rxor__
, __set__
, __set_name__
, __setattr__
, __setitem__
, __setstate__
, __sizeof__
, __str__
, __sub__
, __subclasscheck__
, __truediv__
, __trunc__
, __xor__
Обратите внимание, что это только простые примеры и магические методы могут быть использованы для реализации более сложного поведения классов и объектов в Python.
Так можно посмотреть какие методы доступны функции:
print(dir(bool))
**Ответ в консоли:**
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
Магические методы в Python
Магические методы, также известные как специальные методы или методы-дандеры, являются особыми методами в языке программирования Python. Они позволяют определить поведение классов и объектов в различных контекстах, таких как операторы, итерации, преобразование типов и многое другое.
Некоторые из наиболее часто используемых магических методов в Python включают:
__init__
: метод-конструктор, вызываемый при создании нового экземпляра класса. Он позволяет инициализировать атрибуты объекта и выполнить другие необходимые действия перед его использованием.__str__
: метод, возвращающий строковое представление объекта. Этот метод используется, когда объект нужно представить в виде строки, например, при выводе на экран или при преобразовании в строку.__len__
: метод, возвращающий длину объекта. Он позволяет получить информацию о количестве элементов в объекте, что может быть полезно при работе с коллекциями данных, такими как списки или кортежи.__getitem__
и__setitem__
: методы, позволяющие получить и установить значение элемента объекта по индексу. Они позволяют обращаться к объекту, как к последовательности или контейнеру, и работать с его элементами.__iter__
и__next__
: методы, позволяющие итерировать по объекту. Они позволяют использовать объект в циклеfor
, перебирая его элементы один за другим.
Это лишь небольшой обзор магических методов в Python. Их полный список и детальное описание можно найти в официальной документации Python.
Вот несколько простых примеров кода, демонстрирующих использование магических методов в Python:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def __str__(self):
return f"Rectangle({self.width}, {self.height})"
def __len__(self):
return self.width * self.height
def __getitem__(self, index):
if index == 0:
return self.width
elif index == 1:
return self.height
else:
raise IndexError("Index out of range")
def __setitem__(self, index, value):
if index == 0:
self.width = value
elif index == 1:
self.height = value
else:
raise IndexError("Index out of range")
rectangle = Rectangle(5, 3)
print(rectangle) # Вывод: Rectangle(5, 3)
print(len(rectangle)) # Вывод: 15
print(rectangle[0]) # Вывод: 5
print(rectangle[1]) # Вывод: 3
rectangle[0] = 7
rectangle[1] = 4
print(rectangle) # Вывод: Rectangle(7, 4)
В этом примере мы создаем класс Rectangle
, который имеет атрибуты width
(ширина) и height
(высота). Мы определяем магические методы __str__
, __len__
, __getitem__
и __setitem__
для представления объекта в виде строки, получения его длины, доступа к его элементам по индексу и изменения значений элементов соответственно.
Обратите внимание, что это только простые примеры и магические методы могут быть использованы для реализации более сложного поведения классов и объектов в Python.
Списки list
Последовательность элементов
Упорядоченная последовательность элементов
my_fruits = ['apple', 'banana', 'lime']
posts_ids = [151, 552, 255]
user_inputs = [True, 'hi!', 10.5]
Порядок элементов в списке имеет значение
Каждый элемент в списке имеет свой номер
Проверка длины списка функция len
Для удаления пункта из списка можно использовать оператор del
user_inputs = [True, 'hi!', 10.5]
print(len(user_inputs))
#3
del user_inputs[1]
print(user_inputs)
#True 'hi!'
print(len(user_inputs))
#2
Списки словарей
users = [
{
'user_id': 134,
'user_nmae': 'Alice',
}
{
'user_id': 821,
'user_name': 'Bob'
}
]
print(len(users))
#2
print(users[1]['user_id'])
#821
Методы списков
append
, clear
, copy
, count
, extend
, index
, insert
, pop
, remove
, reverse
, sort
Методы списков объекты наследуют от класса list
.append
-добавляет элемент в список
pop
– удаление из списка (если без указания числа) будет удален последний элемент
sort
– сортировка, сортировка по умолчанию по возрастанию идет, если нужно отсортировать в обратном порядке (по убыванию) пишем именованый аргумент (revers=True)
Конвертация в список
greeting = "Hallo from Python"
greeting_letters = list(greeting)
print(greeting_letters)
#['H', 'a', 'l', 'l', 'o', ' ', 'f', 'r', 'o', 'm', ' ', 'P', 'y', 't', 'h', 'o', 'n']
**Конвертация словарей в списки**
my_dict = {'a': 10, 'b': True}
my_dict_keys = list(my_dict)
print(my_dict_keys)
#['a', 'b']
Арифметические операции в списках
rating = [2.5, 5.0, 4.3, 3.7]
print(min(rating))
print(max(rating))
print(sum(rating))
print(sum(rating)/len(rating))
#2.5
#5.0
#15.5
#3.875
**Объедиение списков**
my_ratings = [2.5, 5.0]
other_ratings = [3.7, 4.5, 4.9]
all_ratings = my_ratings + other_ratings
print(all_ratings)
#[2.5, 5.0, 3.7, 4.5, 4.9]
*при использовании оператора + вызывается магический метод ____add__
в котором уже указано что можно делать с списками*
**Нарезка списков**
ratings = [2.5, 5.0, 4.3, 3.7]
first_two_ratings = ratings[:2]
print(first_two_ratings)
#[2.5, 5.0]
Копирование списков
**Копирование по ссылке:**
my_cars = ['BMW', 'Mercedes']
copied_cars = my_cars
copied_cars.append('Audi')
print(copied_cars)
#['BMW', 'Mercedes', 'Audi']
**Создание нового списка такого же: через :**
my_cars = ['BMW', 'Mercedes']
copied_cars = my_cars [:]
copied_cars.append('Audi')
print(copied_cars)
#['BMW', 'Mercedes', 'Audi']
**Создание нового списка такого же: через функцию copy**
my_cars = ['BMW', 'Mercedes']
copied_cars = my_cars.copy()
copied_cars.append('Audi')
print(copied_cars)
#['BMW', 'Mercedes', 'Audi']
**Создание нового списка такого же: через функцию list**
my_cars = ['BMW', 'Mercedes']
copied_cars = list(my_cars)
copied_cars.append('Audi')
print(copied_cars)
#['BMW', 'Mercedes', 'Audi']