ฉันจะจัดระเบียบซอร์สโค้ด Python ได้อย่างไร [ปิด]


99

ฉันกำลังเริ่มต้นกับ Python (ถึงเวลาแล้วที่ฉันจะยิงมัน) และฉันกำลังมองหาแนวทางปฏิบัติที่ดีที่สุด

โครงการแรกของฉันคือคิวที่เรียกใช้การทดสอบบรรทัดคำสั่งในหลายเธรด ฉันเริ่มได้main.pyไฟล์ที่ยาวมากและฉันต้องการแยกไฟล์ออก โดยทั่วไปฉันกำลังมองหา: โปรแกรมเมอร์ python จะจัดระเบียบไฟล์ซอร์สหลายไฟล์ได้อย่างไร มีโครงสร้างเฉพาะที่เหมาะกับคุณหรือไม่?

คำถามเฉพาะของฉัน ได้แก่ :

  1. แต่ละคลาสควรอยู่ในไฟล์แยกกันหรือไม่?
  2. ฉันจะจัดการทดสอบหน่วยที่เกี่ยวข้องกับซอร์สโค้ดได้อย่างไร
  3. ฉันควรใส่ข้อคิดเห็นเกี่ยวกับเอกสารไว้ที่ใดโดยเฉพาะสำหรับการดำเนินการบรรทัดคำสั่ง
  4. หากฉันใช้หลายไดเรกทอรีฉันจะนำเข้าคลาสระหว่างพวกเขาได้อย่างไร

ฉันอาจจะสามารถวาดบางส่วนของข้อสรุปของตัวเองที่นี่โดยการทดลองและข้อผิดพลาด แต่ผมอยากจะเริ่มต้นจากสิ่งที่ดี


4
สิ่งนี้จะอธิบายสองสามสิ่งเกี่ยวกับการจัดระเบียบโค้ดของคุณdocs.python.org/tutorial/modules.html
Nikola Smiljanić

2
นี่คือข้อมูลที่เป็นประโยชน์เพิ่มเติมจากเอกสาร python <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
คำถามนี้อยู่ในการค้นหาอนุสัญญาที่ยอมรับกันอย่างกว้างขวางโดยเฉพาะในชุมชน Python คำตอบไม่ใช่เรื่องของความคิดเห็นแม้ว่าคำตอบส่วนใหญ่อาจเปลี่ยนแปลงได้ตามกาลเวลา ฉันขอแนะนำให้เปิดใหม่หรืออย่างน้อยที่สุดคำตอบเดิมที่ถูกยกเลิกการลบ
Andres Jaan Tack

คำตอบ:


32

บทความเอริคชี้จะเป็นที่น่ากลัวเพราะมันมีรายละเอียดของการจัดขนาดใหญ่ฐานรหัสหลาม

หากคุณมาที่นี่จาก Google และกำลังพยายามหาวิธีแยกไฟล์ต้นฉบับขนาดใหญ่หนึ่งไฟล์ออกเป็นไฟล์หลายไฟล์ที่จัดการได้มากขึ้นฉันจะสรุปกระบวนการโดยย่อ

สมมติว่าคุณมีทุกอย่างในไฟล์ที่เรียกว่าmain.py:

  • สร้างซอร์สไฟล์อื่นในโฟลเดอร์เดียวกัน (ขอเรียกเราว่าutils.pyเป็นตัวอย่างนี้)
  • ย้ายคลาสฟังก์ชันคำสั่งและอื่น ๆ ที่คุณต้องการจากmain.pyเข้าไปutils.py
  • ในการmain.pyเพิ่มบรรทัดเดียวที่ด้านบน:import utils

แนวคิดสิ่งนี้คือการสร้างโมดูลใหม่ที่เรียกว่าutilsในซอร์สไฟล์อื่น จากนั้นคุณสามารถนำเข้าได้ทุกที่ที่ต้องการ


คุณจำบทความที่ Eric ชี้ไปได้ไหม? ฉันไม่พบ Eric ในคำถาม / คำตอบนี้
Daniel Rucci

7
@DanR ใช่นี้เป็นบทความ ด้วยเหตุผลบางประการผู้ดำเนินรายการจึงลบคำตอบของเขาแม้ว่าจะมีการโหวตถึง 56 ครั้งก็ตาม
Drew Noakes

1
@DrewNoakes: ฉันคิดว่ามันถูกลบเพราะเป็นคำตอบที่เชื่อมโยงเท่านั้น หากเพียงเขาสรุปประเด็นหลักของบทความ
smci

1
น่าเสียดายที่บทความนี้เป็นลิงค์ที่ตายแล้ว :-( เวอร์ชันที่เก็บถาวรล่าสุดอยู่ที่นี่: web.archive.org/web/20190714164001/http://…
Igor Brejc

7

วิธีที่คุณควรจัดระเบียบโค้ดและการทดสอบนั้นเหมือนกับที่คุณทำกับภาษา OO ทุกประการ

คำตอบจากวิธีที่ฉันทำ อาจไม่ถูกต้อง แต่ใช้ได้กับฉัน

  1. ขึ้นอยู่กับวิธีการแยกฟังก์ชันการทำงานของคุณ สำหรับแอป python หลักของฉันฉันมี 1 ไฟล์ที่มีคลาสสำหรับจุดเข้าใช้งานจากนั้นแพ็กเกจของบิตการทำงานที่แตกต่างกัน
  2. ฉันใช้ PyDev สำหรับ eclipse และจัดระเบียบเหมือนที่ฉันทำกับ Java
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. ใช้ DocString ทุกที่เพื่อติดตามทุกสิ่ง
  2. หลังจากตรวจสอบให้แน่ใจว่า__init__.pyไฟล์ที่เกี่ยวข้องอยู่ในโฟลเดอร์ มันเป็นเพียงกรณีง่ายๆของfrom module import class

5
ข้อแม้อย่างหนึ่งคือ: java มีความสัมพันธ์แบบเผด็จการกับแพ็คเกจไฟล์และคลาส บางครั้งฉันก็มีซอร์สไฟล์มากกว่าที่ฉันต้องการจริงๆ อนุสัญญาของบางองค์กรเช่น - หลีกเลี่ยง (ซ้อน) คลาสภายในหรือคลาส "ตัวช่วย" ที่อยู่ต่ำกว่าในไฟล์ - ทำให้สิ่งนี้แย่ลงเกินกว่าข้อกำหนดของคอมไพเลอร์ ทำให้เป็นระเบียบและลำดับชั้นมีประโยชน์ แต่พยายามหลีกเลี่ยงการสร้างผลงาน
Roboprog
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.