Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
develop:pyton:module [2022/02/25 17:16] admin создано |
develop:pyton:module [2022/03/07 13:36] (текущий) admin |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
+ | ===== Модули и пакеты ===== | ||
+ | **Любой файл с кодом**, | ||
+ | Запускаемый модуль всегда называется **__main__**, | ||
+ | |||
+ | ==== import ==== | ||
+ | import < | ||
+ | Название без расширения и т.д., создается одноименный идентификатор, | ||
+ | Проверить существование атрибута- **hasattr()**\\ | ||
+ | |||
+ | Перед выполнением каждый модуль компилируется в байт-код, | ||
+ | Импорт производится при первом вызове, | ||
+ | **__import__(' | ||
+ | |||
+ | |||
+ | ==== from ==== | ||
+ | Для импортирования только определенных идентификаторов\\ | ||
+ | **from < | ||
+ | |||
+ | |||
+ | ==== Пути поиска модулей ==== | ||
+ | Хранятся в переменной **sys.path**. Можно изменять программно- append()\\ | ||
+ | * папка со скриптом | ||
+ | * переменная окружения **PYTHONPATH** | ||
+ | * пути к стандартным модулям | ||
+ | * содержимое в файлах ** *.pth ** | ||
+ | |||
+ | |||
+ | ==== Повторная загрузка модулей ==== | ||
+ | Импортируется один раз, для повторной загрузки ф-я **imp.reload()**\\ | ||
+ | |||
+ | |||
+ | ==== Пакеты ==== | ||
+ | Папка с модулями, | ||
+ | |||
+ | |||
+ | |||
+ | ===== Объектно-ориентированное программирование ===== | ||
+ | В отличии от функционального подхода, | ||
+ | |||
+ | |||
+ | ==== Определение класса, | ||
+ | <code python> | ||
+ | class < | ||
+ | """ | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | В момент описания, | ||
+ | Всем методам, | ||
+ | Все атрибуты и методы являются **public**, можно закрывать костылями\\ | ||
+ | |||
+ | * **getattr(< | ||
+ | * **setattr()** - установить значение, | ||
+ | * **delattr() / hasattr()** - удалить / проверка существования | ||
+ | |||
+ | Атрибуты классу (не объекту а именно классу) **можно создавать в коде, динамически** (собсна функции выше)\\ | ||
+ | |||
+ | <code python> | ||
+ | class MyClass: | ||
+ | pass | ||
+ | |||
+ | MyClass.x= 50 | ||
+ | c1, c2= MyClass(), MyClass() | ||
+ | c1.y= 10 | ||
+ | c2.y= 20 | ||
+ | print(c1.x, c1.y) # 50 10 | ||
+ | print(c2.x, c2.y) # 50 20 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== __init__()/ | ||
+ | Конструктор/ | ||
+ | |||
+ | |||
+ | ==== Наследование ==== | ||
+ | Вроде ничего необычного, | ||
+ | Конструктор базового класса можно переопределять в производном\\ | ||
+ | |||
+ | |||
+ | ==== Множественное наследование ==== | ||
+ | В случае пересечения названий, | ||
+ | |||
+ | |||
+ | === Примеси и их использование === | ||
+ | Что то вроде понятия абстрактного класса\\ | ||
+ | |||
+ | <code python> | ||
+ | class myMixin: # Класс " | ||
+ | attr= 0 # Атрибут такого класса | ||
+ | def mix_met(self): | ||
+ | pass | ||
+ | | ||
+ | class Class1 (MyMixin): | ||
+ | def meth1(): | ||
+ | pass | ||
+ | | ||
+ | class Class2 (Class1, MyMixin): | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Специальные методы ==== | ||
+ | В основном благодаря им можно переопределить (перегрузить) стандартные функции, | ||
+ | |||
+ | |||
+ | ==== Перегрузка операторов ==== | ||
+ | Аналогично, | ||
+ | |||
+ | |||
+ | ==== Статические методы и методы класса ==== | ||
+ | Статические методы создаются с помощью декоратора " | ||
+ | Методы класса, | ||
+ | |||
+ | <code python> | ||
+ | class MyClass: | ||
+ | @staticmethod # Декоратор | ||
+ | def func1(): | ||
+ | pass | ||
+ | def func2(): | ||
+ | pass | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Абстрактные методы ==== | ||
+ | Абстрактные классы содержат только определения методов, | ||
+ | Для верности можно вызывать исключение в функции\\ | ||
+ | Так же есть декоратор " | ||
+ | |||
+ | <code python> | ||
+ | class Class1: | ||
+ | def func1(self, x): # Абстрактный метод | ||
+ | raise NotImplementedError(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Декораторы классов ==== | ||
+ | Аналогично декораторам функций\\ | ||
+ | |||
+ | <code python> | ||
+ | def deco(C): | ||
+ | ... | ||
+ | return C | ||
+ | | ||
+ | @deco | ||
+ | class MyClass: | ||
+ | def __init__(self, | ||
+ | self.v= value | ||
+ | |||
+ | c= myClass(5) | ||
+ | print(c.v) | ||
+ | </ |