Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:pyton:module [2022/02/25 18:08] admin |
develop:pyton:module [2022/03/07 13:36] (текущий) admin |
||
---|---|---|---|
Строка 40: | Строка 40: | ||
===== Объектно-ориентированное программирование ===== | ===== Объектно-ориентированное программирование ===== | ||
+ | В отличии от функционального подхода, | ||
+ | |||
==== Определение класса, | ==== Определение класса, | ||
- | |||
- | |||
<code python> | <code python> | ||
+ | class < | ||
+ | """ | ||
+ | < | ||
</ | </ | ||
- | <code python> | + | В момент описания, |
- | </ | + | Всем методам, |
+ | Все атрибуты и методы являются **public**, можно закрывать костылями\\ | ||
+ | * **getattr(< | ||
+ | * **setattr()** - установить значение, | ||
+ | * **delattr() / hasattr()** - удалить / проверка существования | ||
- | ==== __init__()/__del__() ==== | + | Атрибуты классу |
<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__()/ |
+ | Конструктор/ | ||
- | <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> | ||
- | </ | ||
- | |||
- | |||
- |