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