logo

Фичи Python

Содержание

Полезные моменты

Тут будут собраны всякие полезные моменты, которые могут облегчить процесс написания кода.

Подключение модулей из других папок

Для удобства в проекте все внешние подключаемые модули вынести в отдельную папку, например include.
Допустим структура проекта выглядит вот так:

Здесь в папке include лежат два модуля RTCJoystick и PRiPWM. Модуль RPiPWM можно подключить к файлу test.py таким образом:

import sys
sys.path.append('include')
from MyRPiPWM import RPiPWM


Это эквивалентно тому, что мы положили файл RPiPWM.py рядом с файлом test.py.
Поскольку модуль RTCJoystick требует подключения модуля RTCEventMaster, несмотря на то, что файлы лежат рядом, также подключить модуль не получится, python не знает пути до RTCEventMaster и выдаст ошибку. Поэтому, чтобы его подключить нужно написать вот так:

import sys
sys.path.append('include/Joystick')
import RTCJoystick

Чтобы так не делать, по хорошему импортируемый модуль должен содержать файл __init__.py в котором будет описано, что и откуда данный модуль импортирует для своей работы. Например в случае с RTCJoystick он должен выглядеть так:

from . import RTCEventMaster

В этом же файле может содержаться информация о версии импортируемого модуля. Подробнее смотреть тут.

Допустимые записи:

import sys
sys.path.append('include')
sys.path.append('include/Joystick')
from MyRPiPWM import RPiPWM
import RTCJoystick

или

import sys
sys.path.append('include/MyRPiPWM')
sys.path.append('include/Joystick')
import RTCJoystick
import RPiPWM

Также (вроде) допустимо называть папку также как модуль, и писать, например:

from RPiPWM import RPiPWM
ВАЖНО: требуется дополнительное исследование этого всего.

Специальные методы

Специальные методы - одна из основных фич питона. Заставляют ваши классы работать подобно встроенных классов, а также делают много чего полезного.

Тут будут описаны основные и наиболее полезные методы

Инициализация/окончание работы

Приведение типов;

Приводят типы к встроенным типам int, float, double и т.д. Полезны, иногда работают неявно:

if object:
pass

Для Проверки истинности вызовется приведение к bool. class Gpio:
def __init__(self):
self._pin = 1

def __int__(self):
return self._pin

gpio = Gpio()
pin = int(gpio)

Контроль доступа к аттрибутам;

Тут находятся одни из самых важных специальных методов.

Одно из решений, сделанных в библиотеке vispy: Классы наследуются от Frozen и после вызова freeze нельзя добавить новых аттрибутов, также при наследовании от классов наследников Frozen, после их инициализации также нельзя добавлять новых аттрибутов.

Данный метод - один из ключевых специальных методов класса, который может сделать питон более похожим на стандартное ООП

Представление классов;

class Test:
def __init__(self):
self._data = 10

def __repr__(self):
return ""

test = Test()
print(test) # напечатает

Сравнение/Арифметические операторы и т.д.;

Дальнейшие операторы, могут внести не понятный интуитивно смысл и использовать их нужно очень осторожно

Их можно и иногда нужно неиспользовать

** Еще есть отраженные операторы, составные операторы и т.д.**

Полезные книги

Полезные ссылки

Примеры некоторых паттернов проектирования в Python