Разное
- Python - строго типизированный язык.
- Оператор "is" проверяет значение и тип.
- Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую.
Объекты
- Имя - это ссылка на объект, но не сам объект.
- В случае, когда оба имени указывают на изменяемый объект, его можно изменить с помощью любого имени.
**Объект содержит:**
- тип
- id
- значение
- счетчик ссылок
Типы данных
**Неизменяемые типы данных:**
- int
- bool
- float
- string
- complex
- tuple
- bytes
- frozenset
**Изменяемые типы данных:**
- list
- dict
- set
- bytearray
Классы
Методы
```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
```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
```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)
```
Строки
**Наборы символов:**
```python
import string
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
```