รูปแบบการตั้งชื่อไฟล์ Python?


137

ฉันเคยเห็นส่วนนี้ของ PEP-8 https://www.python.org/dev/peps/pep-0008/#package-and-module-names

ฉันยังไม่ชัดเจนว่านี่หมายถึงชื่อไฟล์ของโมดูล / คลาส / แพ็คเกจหรือไม่

หากฉันมีตัวอย่างหนึ่งของชื่อไฟล์ควรเป็นตัวพิมพ์เล็กทั้งหมดที่มีขีดล่างถ้าเหมาะสมหรือไม่ หรืออย่างอื่น?


4
tl; dr: สองคลาสFooBarและFooBizทั้งสองอาจอยู่ในไฟล์somepkg/foobar.py(ดังนี้:) from somepkg.foobar import FooBarแต่คลาสTimerErrorสามารถไปในexcept/timer_error.py(เช่นfrom except.timer_error import TimerError) เนื่องจากการลบCamelCaseบางครั้งทำให้คำอ่านยากขึ้นจึงsnake_caseอาจใช้สำหรับชื่อไฟล์
ไมเคิล

คำตอบ:


156

การอ้างถึงhttps://www.python.org/dev/peps/pep-0008/#package-and-module-names :

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

สำหรับชั้นเรียน :

โดยปกติชื่อคลาสควรใช้การประชุม CapWords

และชื่อตัวแปรของฟังก์ชั่นและ (ท้องถิ่น)ควรเป็น:

ตัวพิมพ์เล็กโดยใช้คำคั่นด้วยเครื่องหมายขีดล่างเพื่อเพิ่มความสามารถในการอ่าน

ดูคำตอบนี้สำหรับความแตกต่างระหว่างโมดูลคลาสและแพ็คเกจ:

  • โมดูล Python เป็นเพียงไฟล์ต้นฉบับ Python ซึ่งสามารถเปิดเผยคลาสฟังก์ชันและตัวแปรโกลบอล
  • แพ็คเกจ Python เป็นเพียงไดเรกทอรีของโมดูล Python

ดังนั้น PEP 8 บอกคุณว่า :

  • โมดูล (ชื่อไฟล์) ควรมีชื่อสั้นตัวพิมพ์เล็กและสามารถมีขีดล่าง
  • แพคเกจ (ไดเรกทอรี) ควรมีชื่อแบบย่อตัวพิมพ์เล็กทั้งหมดโดยควรมีเครื่องหมายขีดล่าง
  • คลาสควรใช้การประชุม CapWords

PEP 8 บอกว่าชื่อควรจะสั้น ; คำตอบนี้ให้ภาพรวมที่ดีเกี่ยวกับสิ่งที่ต้องคำนึงถึงเมื่อสร้างชื่อตัวแปรซึ่งใช้กับชื่ออื่น ๆ (สำหรับคลาสแพ็คเกจ ฯลฯ ):

  • ชื่อตัวแปรไม่ใช่ตัวอธิบายเต็ม
  • ใส่รายละเอียดในความคิดเห็น
  • ชื่อเฉพาะเกินไปอาจหมายถึงรหัสเฉพาะเกินไป
  • ใช้ขอบเขตสั้น ๆ เพื่อค้นหาอย่างรวดเร็ว
  • ใช้เวลาคิดเกี่ยวกับการอ่าน

จะเสร็จสิ้นภาพรวมที่ดีของการตั้งชื่อจะได้รับในคู่มือสไตล์ Google หลาม


5
และฉันจะขอให้ยืนยันความเข้าใจของฉันอย่างอาย ๆ โมดูลประกอบด้วยคลาสดังนั้นคุณจะใช้คลาสภายในโมดูลและอาจมีหลายคลาสในหนึ่งโมดูลได้หรือไม่
darkace

6
ใช่คุณสามารถมีคลาส 0, 1 หรือมากกว่าในโมดูล
agold

1
ฉันดีใจที่ฉันพบสิ่งนี้ทันเวลาก่อนที่โครงการของฉันจะขยายออกจากมือเนื่องจากแพ็คเกจทั้งหมดของฉันปฏิบัติตามระเบียบวาระการประชุมของ CapsWords เหมือนกับชั้นเรียนของฉัน
Bas Jansen

1
@pypmannetjies นี่เป็นอีกคำถามจริง แต่ฉันจะบอกว่าคุณควรเลือกชื่อที่เข้าใจได้ง่ายมากกว่าชื่อที่สั้นและไม่เข้าใจ
agold

1
สำหรับชื่อแพ็คเกจมันบอกว่า "การใช้ขีดเส้นใต้ไม่ได้รับการสนับสนุน" ไม่ใช่สิ่งต้องห้าม ในปรัชญาของงูหลามคุณควรปฏิบัติตามกฎ "แม้ว่าการใช้ประโยชน์ได้จริงจะต้องมีความบริสุทธิ์" ของหลักสูตรที่ดีที่สุดคือการหาวิธีที่จะปฏิบัติตามกฎและจะปฏิบัติ (อาจจะทำให้หลายแพคเกจที่จะแยกชื่อsome> long> nameแทนsomelongname?)
Juh_

0

นี่คือลิงค์สำหรับข้อตกลงชื่อ Python ประเภทต่างๆ

คู่มือสไตล์สำหรับ Python เป็นไปตามคำแนะนำแบบแผนการตั้งชื่อของ Guido

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.