Trong python, nó được coi là tốt hơn để xác định một mô-đun với các chức năng hoặc một mô-đun với một lớp có chứa các chức năng? [đóng cửa]


12

Trong mã của tôi, một trong hai tùy chọn trên sẽ hoạt động tốt như nhau nhưng tôi thích tìm hiểu những ưu và nhược điểm của cả hai phương pháp.

Câu trả lời:


9

Nó thành thật phụ thuộc vào nhu cầu của bạn. Hầu hết thời gian một mô-đun chức năng sẽ là những gì bạn đang tìm kiếm.

Các lớp Python (imho) không nên được nghĩ giống như các lớp trong C # hoặc C ++ hoặc Java, cần phải có một lý do hợp lý để nhóm một tập hợp các hàm thành một cha mẹ lớn hơn, các cấu trúc dữ liệu sẽ là một ví dụ tốt về điều này, bạn muốn một tập hợp các hàm áp dụng trực tiếp cho lớp thay vì một tập hợp các hàm được thu thập một cách lỏng lẻo là mục đích chung.

  • Mô-đun chức năng: mục đích chung, tiện ích và nhiều chức năng "toàn cầu"
  • Mô-đun của lớp chức năng: các lớp có nhu cầu tương tự, các kiểu dữ liệu danh sách được liên kết khác nhau hoặc các hàm xử lý âm thanh hoặc các loại cây khác nhau.

Một mô-đun dành cho nhóm phân cấp tổng thể của các hệ thống tương tự, tôi thường có tất cả các chức năng tiện ích trong một mô-đun duy nhất, tất cả dữ liệu dưới một mô-đun khác, lớp dữ liệu của tôi và các đầu nối theo mô-đun kiểu "cha mẹ" hơn. Vì một mô-đun chỉ là một nhóm tinh thần, nên nó ít hơn về các loại hệ thống trong đó (các lớp hoặc chức năng, có thể là sự kết hợp của cả hai) và nhiều hơn về các kết nối logic giữa các hệ thống trong mô-đun.


5
Tôi không hiểu sự tương phản giữa một lớp Python và các ngôn ngữ khác. Trong ngôn ngữ nào bạn sẽ có một lớp với các chức năng không có lý do hợp lý của việc được nhóm?
Guy Sirton

7

Câu hỏi cơ bản là nếu bạn cần có các phiên bản khác nhau của mô-đun / lớp. một mô-đun python giống như một singleton - bạn luôn luôn tham chiếu đến cùng một đối tượng, tức là nếu bạn cần phiên bản, bạn cần một lớp.

Tuy nhiên, nếu bạn không cần phiên bản, bạn vẫn có thể cần phải thiết lập "đối tượng" của mình về trạng thái ban đầu. trong khi điều này rõ ràng là có thể với một mô-đun đơn giản, nếu việc khởi tạo phức tạp hơn chỉ là thiết lập một số giá trị, tôi khuyên bạn nên có mã khởi tạo trong __init__phương thức của lớp để dễ đọc.


2
có thể đáng để chỉ ra rằng bạn có thể đang nói về một cái gì đó có trạng thái, ví dụ như một mô-đun với các biến toàn cục so với một lớp với các biến thành viên. nếu lớp của bạn chỉ có các phương thức nhưng không có trạng thái, có rất ít lý do để có nhiều trường hợp
thbusch

2
@thbusch, vâng, điều này được ngụ ý trong các trường hợp cần thiết .
kr1

Khi bạn nói về sự cần thiết của một cá thể khiến tôi hiểu mô-đun so với lớp. Giống như nếu tôi cần tạo ra nhiều ô tô thì một lớp sẽ phù hợp với mô-đun máy tính mà tôi không cần tạo ra một loạt các máy tính, tôi chỉ cần sử dụng các phương thức cộng và trừ từ mô-đun đó.
tazboy
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.