Инструменты пользователя

Инструменты сайта


develop:pyton:module

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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> </code>
  
-<code python> +В момент описания, **создается полноценный объект**. Выполнение **происходит в месте определения** а не создания экземпляров\\ 
-</code>+Всем методам, обязательно, первым параметром **передается ссылка на экземпляр** класса (**self**), либо вызывать ф-ю из объекта\\ 
 +Все атрибуты и методы являются **public**, можно закрывать костылями\\
  
 +  * **getattr(<self>, <attr>, <default>=)** - значение атрибута, либо исключение, название можно формировать динамически
 +  * **setattr()** - установить значение, если атрибут не существует, то будет создан
 +  * **delattr() / hasattr()** - удалить / проверка существования
  
-==== __init__()/__del__() ==== +Атрибуты классу (не объекту а именно классу**можно создавать в коде, динамически** (собсна функции выше)\\
  
 <code python> <code python>
-</code>+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
 </code> </code>
  
  
-==== Наследование ====+==== __init__()/__del__() ==== 
 +Конструктор/Деструктор (в скриптовой специфике python, последний особо смысла не имеет)\\
  
  
-<code python> +==== Наследование ==== 
-</code> +Вроде ничего необычного, public-наследование..\\  
- +Конструктор базового класса можно переопределять в производном\\
-<code python> +
-</code>+
  
  
 ==== Множественное наследование ==== ==== Множественное наследование ====
- +В случае пересечения названий, порядок поиска соответствует порядку перечисления классов в описании\\
- +
-<code python> +
-</code> +
- +
-<code python> +
-</code>+
  
  
 === Примеси и их использование === === Примеси и их использование ===
- +Что то вроде понятия абстрактного класса\\
- +
-<code python> +
-</code>+
  
 <code python> <code python>
 +class myMixin: # Класс "примеси"
 +  attr= 0      # Атрибут такого класса
 +  def mix_met(self):
 +    pass
 +    
 +class Class1 (MyMixin):
 +  def meth1():
 +    pass
 +    
 +class Class2 (Class1, MyMixin):
 +  ...
 </code> </code>
  
  
 ==== Специальные методы ==== ==== Специальные методы ====
- +В основном благодаря им можно переопределить (перегрузить) стандартные функции, типа преобразования, проверка длинны и т.д., такие как: __call__() (типа д-е по умолчанию, при вызове объекта без методов), __getattr__ (set/del), __bool__(), __int__(), __float__() и т.д.\\
- +
-<code python> +
-</code> +
- +
-<code python> +
-</code>+
  
  
 ==== Перегрузка операторов ==== ==== Перегрузка операторов ====
- +Аналогично, целый ряд спец функций для этого: __add__(), __sub__(), __mul__() и т.д. оч много..\\
- +
- +
-<code python> +
-</code> +
- +
-<code python> +
-</code>+
  
  
 ==== Статические методы и методы класса ==== ==== Статические методы и методы класса ====
- +Статические методы создаются с помощью декоратора "@staticmethod". При вызове такого, self указывать собсна не нужно\\ 
- +Методы класса, декоратор "@classmethod", первым параметром передается ссылка на класс\\
-<code python> +
-</code>+
  
 <code python> <code python>
 +class MyClass:
 +  @staticmethod # Декоратор
 +  def func1():  # Статический метод
 +    pass
 +  def func2():  # Обычный метод
 +    pass
 </code> </code>
  
  
 ==== Абстрактные методы ==== ==== Абстрактные методы ====
- +Абстрактные классы содержат только определения методов, без реализации\\ 
- +Для верности можно вызывать исключение в функции\\ 
-<code python> +Так же есть декоратор "@abstractmethod"
-</code> +
- +
-<code python> +
-</code> +
- +
- +
-==== Ограничение доступа ==== +
- +
- +
-<code python> +
-</code> +
- +
-<code python> +
-</code> +
- +
- +
-==== Свойства класса ==== +
- +
- +
-<code python> +
-</code>+
  
 <code python> <code python>
 +class Class1: 
 +  def func1(self, x): # Абстрактный метод
 +    raise NotImplementedError("Необходимо переопределить метод")
 </code> </code>
  
  
 ==== Декораторы классов ==== ==== Декораторы классов ====
 +Аналогично декораторам функций\\
  
 <code python> <code python>
-</code>+def deco(C): 
 +  ... 
 +  return C 
 +   
 +@deco 
 +class MyClass: 
 +  def __init__(self, value): 
 +    self.v= value
  
-<code python>+c= myClass(5) 
 +print(c.v)
 </code> </code>
- 
- 
- 
-<code python> 
-</code> 
- 
-<code python> 
-</code> 
- 
- 
- 
develop/pyton/module.1645812504.txt.gz · Последнее изменение: 2022/02/25 18:08 — admin