Các lớp so với các mô-đun trong Python


19

Python có nhiều mô-đun (chẳng hạn như re) thực hiện một bộ hành động cụ thể. Bạn có thể gọi các chức năng của mô-đun này và nhận kết quả, và toàn bộ mô-đun có một ý tưởng đằng sau nó (trong trường hợp này, xử lý các biểu thức thông thường).

Các lớp dường như thực hiện gần như cùng một thứ, nhưng dường như chúng cũng sử dụng các thuộc tính nhiều hơn một chút so với các mô-đun.

Những mô-đun khác với các lớp là gì? (Tôi biết tôi không thể phân lớp một mô-đun, nhưng có phải vậy không?) Khi nào tôi nên sử dụng một lớp thay vì một mô-đun?


Bạn có biết rằng khi bạn gọi các phương thức mô-đun, đôi khi mô-đun chỉ truyền qua một thể hiện của một lớp không? Xem ví dụ randommô-đun. Tôi không nhớ liệu điều này có đúng hay không re, tuy nhiên.
jscs

1
Một khái niệm liên quan cần biết - Mô-đun so với Gói?
RBT

Câu trả lời:


12

Một mô-đun python không có gì ngoài một gói để đóng gói mã có thể tái sử dụng. Các mô-đun thường, nhưng không phải luôn luôn, nằm trong một thư mục chứa một __init__.pytập tin bên trong nó. Các mô-đun có thể chứa các chức năng nhưng cũng có các lớp. Các mô-đun được nhập khẩu bằng cách sử dụng importtừ khóa.

Python có một cách để đặt các định nghĩa trong một tệp và sử dụng chúng trong một tập lệnh hoặc trong một phiên bản tương tác của trình thông dịch. Một tập tin như vậy được gọi là một mô-đun; định nghĩa từ một mô-đun có thể được nhập vào các mô-đun khác hoặc vào mô-đun chính.

Tìm hiểu thêm về các mô-đun Python tại các liên kết sau:

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

Các lớp, mặt khác, có thể được xác định trong mã ứng dụng chính của bạn hoặc bên trong các mô-đun được nhập bởi ứng dụng của bạn. Các lớp là mã của lập trình hướng đối tượng và có thể chứa các thuộc tính và phương thức.

Tìm hiểu thêm về các lớp Python tại các liên kết sau:

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


3
Vì vậy, không có gì xấu khi có một lớp duy nhất trong một mô-đun, ngay cả khi lớp đó chỉ có chức năng? Tôi cảm thấy như trong tình huống đó, tôi thường chỉ nên tạo một mô-đun mà không tạo một lớp. Có một quy tắc cơ bản nào khi sử dụng các lớp thay vì các mô-đun không? (Đó là những gì tôi đang cố hỏi ... Tôi có nên chỉnh sửa câu hỏi của mình để làm cho nó rõ ràng hơn không?)
Pro Q

6
Bạn có thể tạo nhiều thể hiện của một lớp, nhưng bạn không thể tạo các thể hiện của một mô-đun. Bạn có thể so sánh các mô-đun với các lớp tĩnh hoặc singletons.
Eneko Alonso

1
Các mô-đun không luôn luôn nằm trong một thư mục với một __init__.pytập tin.
đa cấp

1
@ProQ Trong các ngôn ngữ như Python, nơi bạn có thể có các hàm trong các mô-đun chứ không phải các lớp (trái ngược với Java), hình thức tốt là chỉ giữ các hàm tĩnh ở cấp mô-đun. Các lớp ngụ ý các trường hợp với trạng thái riêng của họ.
Turksarama

-2

Nếu đó là một loạt các hàm thuần túy, ví dụ re, tôi đặt chúng vào một mô-đun. Tôi sử dụng một lớp khi tôi biết có trạng thái tôi muốn giữ theo mã đó (ví dụ: một tệp được đọc một lần, nhưng dữ liệu của chúng được sử dụng bởi một số chức năng).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.