Як слід організувати вихідний код Python? [зачинено]


99

Я розпочинаю роботу з Python (час, коли я даю це зробити), і шукаю найкращі практики.

Мій перший проект - це черга, яка виконує експерименти з командним рядком у кількох потоках. Я починаю отримувати дуже довгий main.pyфайл, і я хотів би його розбити. Взагалі я шукаю: Як програмісти python організовують декілька вихідних файлів? Чи є якась така структура, яка працює для вас?

Мої конкретні запитання включають:

  1. Чи повинен кожен клас бути в окремому файлі?
  2. Як слід організувати одиничні тести відносно вихідного коду?
  3. Де я повинен розмістити коментарі doc, зокрема ті, що стосуються командного рядка?
  4. Якщо я використовую декілька каталогів, як імпортувати класи між ними?

Я, мабуть, можу зробити деякі власні висновки тут шляхом спроб та помилок, але я б краще почати з чогось хорошого .


4
Це пояснить кілька речей щодо організації вашого коду docs.python.org/tutorial/modules.html
Нікола

2
Ось ще кілька корисних відомостей з python docs. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
Це питання полягає у пошуках загальновизнаної конвенції саме в спільноті Python. Відповідь не є питанням думки, хоча, як і більшість відповідей, вона може змінитися з часом. Я пропоную це повторно відкрити або, принаймні, оригінальну відповідь не визначити.
Андрес Яан Так

Відповіді:


32

Стаття Ерік вказала на це дивовижний , тому що він охоплює деталь організації великих баз коди на Python.

Якщо ви приїхали сюди від Google і намагаєтесь дізнатись, як розділити один великий вихідний файл на кілька, більш керованих файлів, я коротко підсумую цей процес.

Припустимо, у вас зараз є все у файлі під назвою main.py:

  • Створіть ще один вихідний файл у цій же папці (назвемо наш utils.pyдля цього прикладу)
  • Переміщення будь-яких класів, функція, заяву і т.д. вам потрібно від main.pyвutils.py
  • В main.pyдодати один рядок у верхній частині:import utils

Концептуально це робиться для створення нового модуля, який називається utilsв іншому вихідному файлі. Потім ви можете імпортувати його там, де це потрібно.


Ви пам'ятаєте статтю, на яку вказував Ерік? Я не можу знайти Еріка з цього питання / відповіді
Даніель Руччі

7
@DanR, так, це стаття . Чомусь модератор видалив свою відповідь, незважаючи на те, що вона отримала 56 відгуків.
Дрю Ноакс

1
@DrewNoakes: я думаю, що його видалено за відповідь, що стосується лише посилання; якби він лише узагальнив основні моменти статті.
smci

1
На жаль, стаття є мертвим посиланням зараз :-(. Остання заархівована версія тут: web.archive.org/web/20190714164001/http://…
Ігор Брейц

7

Спосіб організації вашого коду та тестів точно такий же, як і для будь-якої мови ОО.

Відповіді з того, як я це роблю. Це може бути не правильно, але працює для мене

  1. Залежить від розбиття вашої функціональності. У моєму головному додатку python у мене є 1 файл із класами для вхідних точок, а потім пакети з різними бітами функціональності
  2. Я використовую PyDev для затемнення і впорядковую його так, як на Java.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Використовуйте DocString скрізь, щоб відстежувати все
  2. Переконайтесь, що відповідні __init__.pyфайли знаходяться у папках. це просто простий випадокfrom module import class

5
Однак один застереження: java має своєрідний диктаторський зв’язок із пакунками, файлами та класами. Іноді я закінчую набагато більше вихідних файлів, ніж я б дійсно хотів. Конвенції деяких організацій, наприклад, уникати (вкладених) внутрішніх класів або "помічницьких" класів нижче у файлі - роблять це гірше, ніж вимоги компілятора. Тримайте це впорядковано, і ієрархія корисна, але намагайтеся уникати макіяжу.
Робопрог
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.