ฉันมีโมดูลที่มีจุดประสงค์เพื่อกำหนดคลาสที่เรียกว่า "ปลายปากกา" (และคลาสอื่น ๆ ที่เกี่ยวข้องด้วย) ฉันจะเรียกโมดูลนี้ได้อย่างไร? "จะงอย"? "nibmodule"? มีอะไรอีกไหม
ฉันมีโมดูลที่มีจุดประสงค์เพื่อกำหนดคลาสที่เรียกว่า "ปลายปากกา" (และคลาสอื่น ๆ ที่เกี่ยวข้องด้วย) ฉันจะเรียกโมดูลนี้ได้อย่างไร? "จะงอย"? "nibmodule"? มีอะไรอีกไหม
คำตอบ:
เพียงปลายปากกา ตั้งชื่อคลาส Nib ด้วยตัวพิมพ์ใหญ่ N สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบการตั้งชื่อและคำแนะนำสไตล์อื่น ๆ โปรดดูPEP 8คำแนะนำสไตล์ Python
Client
client
แต่ตามหลักการของคุณชื่อโมดูลจะเป็นclient
ดังนั้นฉันจะต้องตั้งชื่ออินสแตนซ์ของฉันในสิ่งที่ไม่เป็นธรรมชาติclient_instance
เสมอ คุณคิดอย่างไรกับปัญหานี้?
Client
Client
เนื่องจากมีเพียง 3 การตั้งชื่อที่เป็นไปได้สายพันธุ์ ( client
, Client
หรือCLIENT
) มีมักจะปะทะกันระหว่างสองกรณีเรียนโมดูลหรือค่าคงที่ ฉันเชื่อว่ามีน้อยครั้งที่คุณจะตั้งชื่อโมดูลของคุณให้เหมือนกับอินสแตนซ์หรือค่าคงที่มากกว่าคลาสดังนั้นจึงเป็นรูปแบบการตั้งชื่อที่ดีกว่าสำหรับความเป็นไปได้อื่น ๆ นอกจากนี้ยังทำให้การนำเข้าจากโมดูลสามารถอ่านได้มากขึ้นเนื่องจากโดยทั่วไปคุณจะนำเข้าคลาสและค่าคงที่แทนที่จะเป็นตัวแปร
ฉันจะเรียกมันว่า nib.py และฉันจะตั้งชื่อคลาส Nib ด้วย
ในโปรเจ็กต์ python ขนาดใหญ่ที่ฉันกำลังทำอยู่เรามีโมดูลจำนวนมากที่กำหนดคลาสที่สำคัญเพียงคลาสเดียว ชั้นเรียนจะขึ้นต้นด้วยอักษรตัวใหญ่ โมดูลถูกตั้งชื่อเหมือนคลาสในตัวพิมพ์เล็ก สิ่งนี้นำไปสู่การนำเข้าดังต่อไปนี้:
from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs
มันเหมือนกับการเลียนแบบวิธี Java หนึ่งคลาสต่อไฟล์ แต่ด้วยความยืดหยุ่นที่เพิ่มขึ้นคุณสามารถเพิ่มคลาสอื่นลงในไฟล์เดียวได้หากเหมาะสม
ฉันรู้ว่าโซลูชันของฉันไม่ได้รับความนิยมมากนักจากมุมมอง pythonic แต่ฉันชอบใช้แนวทาง Java ของหนึ่งโมดูล -> หนึ่งคลาสโดยมีโมดูลชื่อเป็นคลาส ฉันเข้าใจเหตุผลเบื้องหลังสไตล์ python แต่ฉันไม่ชอบที่จะมีไฟล์ขนาดใหญ่มากที่มีคลาสมากมาย ฉันพบว่ามันยากที่จะเรียกดูแม้จะพับ
อีกเหตุผลหนึ่งคือการควบคุมเวอร์ชัน: การมีไฟล์ขนาดใหญ่หมายความว่าการกระทำของคุณมักจะจดจ่ออยู่กับไฟล์นั้น ซึ่งอาจนำไปสู่การแก้ไขความขัดแย้งในปริมาณที่มากขึ้น นอกจากนี้คุณยังสูญเสียข้อมูลบันทึกเพิ่มเติมที่คอมมิตของคุณปรับเปลี่ยนไฟล์เฉพาะ (ดังนั้นจึงเกี่ยวข้องกับคลาสเฉพาะ) แต่คุณจะเห็นการแก้ไขไฟล์โมดูลโดยมีเพียงคอมเมนต์คอมมิตเพื่อทำความเข้าใจว่ามีการแก้ไขอะไรบ้าง
สรุปถ้าคุณชอบปรัชญาหลามให้ไปดูคำแนะนำของโพสต์อื่น ๆ หากคุณชอบปรัชญาเหมือนจาวาแทนให้สร้าง Nib.py ที่มีคลาส Nib
spyder
หรือเครื่องมือแก้ไขที่คล้ายกันเพื่อดูข้อมูลสรุปของคลาสของคุณเพื่อช่วยในการนำทางและบานหน้าต่างสองบานที่มีไฟล์เดียวกันเปิดอยู่บนทั้งสอง นอกจากนี้โปรดอ่าน PEP8 Python ใช้สำหรับเขียน Python และ Java สำหรับ Java แต่ Python ไม่ได้มีไว้สำหรับเขียน Java
ปลายปากกาไม่เป็นไร หากมีข้อสงสัยโปรดดูคู่มือสไตล์ Python
จากPEP 8 :
โมดูลชื่อแพ็กเกจและโมดูลควรมีชื่อสั้น ๆ เป็นตัวพิมพ์เล็กทั้งหมด สามารถใช้ขีดล่างในชื่อโมดูลได้หากช่วยเพิ่มความสามารถในการอ่าน แพ็คเกจ Python ควรมีชื่อที่สั้นและเป็นตัวพิมพ์เล็กทั้งหมดแม้ว่าจะไม่สนับสนุนการใช้เครื่องหมายขีดล่างก็ตาม
เนื่องจากชื่อโมดูลถูกแมปกับชื่อไฟล์และระบบไฟล์บางระบบจึงไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่และตัดชื่อที่ยาวออกไปจึงเป็นสิ่งสำคัญที่ชื่อโมดูลจะถูกเลือกให้ค่อนข้างสั้นซึ่งจะไม่เป็นปัญหาใน Unix แต่อาจเป็น ปัญหาเมื่อรหัสถูกส่งไปยัง Mac หรือ Windows เวอร์ชันเก่าหรือ DOS
เมื่อโมดูลส่วนขยายที่เขียนด้วย C หรือ C ++ มีโมดูล Python ที่มาพร้อมกับอินเทอร์เฟซระดับที่สูงขึ้น (เช่นเชิงวัตถุมากขึ้น) โมดูล C / C ++ จะมีขีดล่างนำหน้า (เช่น _socket)
จากPEP-8: ชื่อแพ็คเกจและโมดูล :
โมดูลควรมีชื่อสั้น ๆ เป็นตัวพิมพ์เล็กทั้งหมด สามารถใช้ขีดล่างในชื่อโมดูลได้หากช่วยเพิ่มความสามารถในการอ่าน
แพ็คเกจ Pythonควรมีชื่อที่สั้นและเป็นตัวพิมพ์เล็กทั้งหมดแม้ว่าจะไม่สนับสนุนการใช้เครื่องหมายขีดล่างก็ตาม
เมื่อโมดูลส่วนขยายที่เขียนด้วย C หรือ C ++มีโมดูล Python ที่มาพร้อมกับอินเทอร์เฟซระดับที่สูงขึ้น (เช่นเชิงวัตถุมากขึ้น) โมดูล C / C ++ จะมีขีดล่างนำหน้า (เช่น _socket)
โมดูลfooใน python จะเทียบเท่ากับไฟล์คลาสFooใน Java
หรือ
โมดูลfoobarใน python จะเทียบเท่ากับไฟล์คลาสFooBarใน Java