Разное
- Python - строго типизированный язык.
- Оператор "is" проверяет значение и тип.
- Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую.
Объекты
- Имя - это ссылка на объект, но не сам объект.
- В случае, когда оба имени указывают на изменяемый объект, его можно изменить с помощью любого имени.
**Объект содержит:**
- тип
- id
- значение
- счетчик ссылок
Типы данных
**Неизменяемые типы данных:**
- int
- bool
- float
- string
- complex
- tuple
- bytes
- frozenset
**Изменяемые типы данных:**
- list
- dict
- set
- bytearray
Классы
* Результат вызова класса - экземпляр класса.
* Методы работы с атрибутами - `getattr, setattr, hasattr`
```python
__mro__ # возвращает картеж родетельских классов
```
Миксины
`Mixin` — это класс, предоставляющий реализации методов для повторного использования дочерними классами. Он представляет ограниченную форму множественного наследования и родительский класс, который просто даёт функциональные возможности подклассам, не содержит состояния и не предназначен для создания экземпляров.
Когда использовать миксины? Они подходят, когда хочется:
* предоставить множество дополнительных функций для класса
* использовать определённую функцию во множестве разных классов
@property
```python
class C:
def __init__(self):
self._x = None
@property
def x(self): # В декораторах 'setter' и 'deleter' нужно указывать имя метода-свойства
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
```
@classmethod
**@classmethod** – это метод, который получает класс в качестве неявного первого аргумента, точно так же, как обычный метод экземпляра получает экземпляр. Это означает, что вы можете использовать класс и его свойства внутри этого метода, а не конкретного экземпляра.
**@classmethod** используется, когда вам нужно получить методы, не относящиеся к какому-либо конкретному экземпляру, но тем не менее, каким-то образом привязанные к классу. Самое интересное в них то, что их можно переопределить дочерними классами.
```python
class A():
count = 0
def __init__(self):
A.count += 1
def exclaim(self):
print('I`m an A!')
@classmethod
def kids(cls):
print("A has", cls.count, "little objects.")
def test_classmethod():
easy_a = A()
breezy_a = A()
wheezy_a = A()
A.kids()
```
@staticmethod
@staticmethod – используется для создания метода, который ничего не знает о классе или экземпляре, через который он был вызван. Он просто получает переданные аргументы, без неявного первого аргумента, и его определение неизменяемо через наследование.
```python
class CoyoteWeapon():
@staticmethod
def commercial():
print('This CoyoWeapon has been brought to you by Acme')
CoyoteWeapon.commercial()
```
Полезные фичи
* Фуyкция divmod возвращает частное и остаток
```python
>>> divmod(9, 5)
(1, 4)
```
Строки
**Модуль string содержит строковые константы:**
```python
import string
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
```
Бинарные данные
* bytes - картеж байтов (неизменяемый тип)
* bytearray - список байтов (изменяемый тип)