คลาสกับโมดูลใน Python


19

Python มีโมดูลมากมาย (เช่นre) ที่ทำชุดของการกระทำเฉพาะ คุณสามารถเรียกใช้ฟังก์ชั่นของโมดูลนี้และรับผลลัพธ์และโมดูลโดยรวมมีแนวคิดอยู่เบื้องหลัง (ในกรณีนี้คือการจัดการกับนิพจน์ทั่วไป)

คลาสดูเหมือนจะทำสิ่งเดียวกันเกือบทั้งหมด แต่พวกมันดูเหมือนจะใช้คุณสมบัติค่อนข้างมากกว่าโมดูล

โมดูลแตกต่างจากคลาสอย่างไร? (ฉันรู้ว่าฉันไม่สามารถคลาสย่อยโมดูลได้ แต่มันคืออะไร) ฉันควรใช้คลาสแทนโมดูลเมื่อใด


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

1
แนวคิดที่เกี่ยวข้องกับการรู้ - Module vs. Package?
RBT

คำตอบ:


12

โมดูลหลามคืออะไรนอกจากแพ็คเกจเพื่อห่อหุ้มรหัสที่นำกลับมาใช้ใหม่ได้ โมดูลมักจะอยู่ในโฟลเดอร์ที่มี__init__.pyไฟล์อยู่ภายใน โมดูลสามารถมีฟังก์ชั่น แต่ยังเรียน โมดูลจะถูกนำเข้าโดยใช้importคำหลัก

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

เรียนรู้เพิ่มเติมเกี่ยวกับโมดูล Python ที่ลิงก์เหล่านี้:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

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

เรียนรู้เพิ่มเติมเกี่ยวกับคลาส Python ที่ลิงค์เหล่านี้:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)


3
ดังนั้นจึงไม่ใช่เรื่องดีที่จะมีคลาสเดี่ยวในโมดูลแม้ว่าคลาสนั้นจะมีฟังก์ชันหรือไม่ ฉันรู้สึกว่าในสถานการณ์เช่นนี้ฉันควรสร้างโมดูลโดยไม่ต้องเรียน มีกฎพื้นฐานว่าเมื่อใดควรใช้คลาสแทนโมดูล? (นั่นคือสิ่งที่ฉันพยายามถาม ... ฉันควรแก้ไขคำถามของฉันเพื่อให้ชัดเจนขึ้นหรือไม่)
Pro Q

6
คุณสามารถสร้างคลาสได้หลายอินสแตนซ์ แต่คุณไม่สามารถสร้างอินสแตนซ์ของโมดูลได้ คุณสามารถเปรียบเทียบโมดูลกับคลาสแบบคงที่หรือแบบซิงเกิล
Eneko Alonso

1
โมดูลไม่ได้อยู่ในโฟลเดอร์ที่มี__init__.pyไฟล์เสมอไป
multigoodverse

1
@ProQ ในภาษาเช่น Python ที่คุณสามารถมีฟังก์ชั่นในโมดูลได้มากกว่าคลาส (ซึ่งตรงกันข้ามกับ, พูด, Java) มันเป็นรูปแบบที่ดีโดยทั่วไปเพียงแค่ให้ฟังก์ชั่นคงที่ในระดับโมดูล คลาสบ่งบอกถึงอินสแตนซ์ที่มีสถานะของตนเอง
Turksarama

-2

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

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