Георги Кунчев
18.11.2024 15:26
В последната лекция питахте дали можем да дадем задачи за пакети. Аз казах, че ми е трудно да дефинирам, но пък мога да споделя пример, в който се стремя да покажа разнообразие от похвати.
Можете да го видите [тук](https://github.com/gvkunchev/modules_demo/tree/main/helpers).
Идеята е проста. Написах пакет `helpers`, който съдържа всевъзможни глезотии. Глезотиите са дребни и семпли, но те не са важни. Важното е, че са подредени в структура, така че да са достъпни зад определени имена, които описват поведението им.
Успоредно на пакета има файл `demo.py`, който визуализира различни начини на импортиране на неща от пакета, както и функционалността на самите глезотии.
Не съм си играл да пиша докстрингове, защото смятам, че глезотиите са ясни, но ако има нещо неясно, питайте долу в коментарите.
Идеята е този пакет да е част от евентуален проект, така че той да може да използва функционалностите му. Разбирайте - вместо файла `demo.py` да имате други файлове и директории, които реализират проекта. Разбира се, ако това е нещо, което вие използвате много, можете да го пакетирате в един Wheel и да си го инсталирате глобално, или дори да го качите в [pypi](https://pypi.org/). В последните слайдове от последната лекция има пример как се прави.
Целта на пакета е да визуализира как можете да структурирате обособени част от проектите си и как да реферирате към отделните парчета от гледна точка на останалия код.
Всеки от `__init__.py` файловете импортира подмодулите си, за да могат те да са достъпни зад името на пакета (например `import helpers` ще изпълни `__init__.py` файла на пакета `helpers`, което от своя страна имортира трите подпакета, т.е. се изпълняват техните `__init__.py` файлове, което от своя страна импортира модулите на най-вътрешно ниво).
Освен самия `demo.py` файл, в който има различни начини на импортиране, може да разгледате и [този](https://github.com/gvkunchev/modules_demo/blob/main/helpers/classes/inherit.py) файл, в който импортираме неща от самия пакет.
Ще видите много различни импорти, но няма никаква конкретна мисъл за тях. Един път взимам целия `helpers` и после бъркам в него, един път импортирам само функция от най-вътрешно ниво, един път правя релатив импорт...всичко това е просто за разнообразие. Няма грешен и верен похват тук.