ใน python จะถือว่าดีกว่าในการกำหนดโมดูลที่มีฟังก์ชั่นหรือโมดูลที่มีคลาสที่มีฟังก์ชั่นหรือไม่? [ปิด]


13

ในรหัสของฉันทั้งสองตัวเลือกข้างต้นจะทำงานได้ดีเท่า ๆ กัน แต่ฉันสนใจที่จะหาข้อดีและข้อเสียของทั้งสองวิธี

คำตอบ:


9

มันสุจริตขึ้นอยู่กับความต้องการของคุณ ส่วนใหญ่โมดูลการทำงานจะเป็นสิ่งที่คุณกำลังมองหา

Python คลาส (imho) ไม่ควรคิดเหมือนคลาสใน C # หรือ C ++ หรือ Java จำเป็นต้องมีเหตุผลเชิงตรรกะในการจัดกลุ่มชุดของฟังก์ชั่นเป็นพาเรนต์ที่ใหญ่กว่าโครงสร้างข้อมูลจะเป็นตัวอย่างที่ดีของสิ่งนี้คุณต้องการ ชุดของฟังก์ชันที่สอดคล้องกันที่ใช้โดยตรงกับคลาสแทนที่จะเป็นชุดของฟังก์ชันที่รวบรวมไว้อย่างหลวม ๆ ซึ่งมีวัตถุประสงค์ทั่วไป

  • โมดูลของฟังก์ชั่น: วัตถุประสงค์ทั่วไปยูทิลิตี้และฟังก์ชั่น "ทั่วโลก" มากขึ้น
  • โมดูลของคลาสของฟังก์ชั่น: คลาสที่จัดกลุ่มของความต้องการที่คล้ายกัน, ชนิดข้อมูลลิสต์ที่เชื่อมโยงที่แตกต่างกัน, หรือฟังก์ชั่นการประมวลผลเสียงหรือประเภทต้นไม้ที่แตกต่างกัน

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


7
ฉันไม่เข้าใจความแตกต่างระหว่างคลาส Python กับภาษาอื่น คุณจะเรียนภาษาอะไรกับคลาสที่มีฟังก์ชั่นที่ไม่มีเหตุผลเชิงตรรกะในการจัดกลุ่ม?
Guy Sirton

7

คำถามพื้นฐานคือถ้าคุณต้องการอินสแตนซ์ต่าง ๆของโมดูล / คลาสของคุณ โมดูลหลามก็เหมือนกับซิงเกิลตัน - คุณอ้างถึงวัตถุเดียวกันเสมอเช่นถ้าคุณต้องการอินสแตนซ์คุณต้องมีคลาส

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


2
มันอาจคุ้มค่าที่จะชี้ให้เห็นว่าคุณอาจกำลังพูดถึงบางสิ่งที่มีสถานะเช่นโมดูลที่มีตัวแปรโกลบอลเทียบกับคลาสที่มีตัวแปรสมาชิก ถ้าคลาสของคุณมีเมธอด แต่ไม่มีสถานะมีเหตุผลเล็กน้อยที่จะมีหลายอินสแตนซ์
thbusch

3
@thbusch ใช่นี้เป็นนัยในต้องกรณี
kr1

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