6

Tôi đang phát triển một ứng dụng Python App Engine, nơi tôi muốn chia nhỏ nội dung của tệp mã nguồn Models.py thành các tệp riêng biệt cho mỗi mô hình, nhưng tôi muốn đặt tất cả trong một thư mục có tên Mô hình. Vấn đề là khi tôi làm điều đó, ứng dụng của tôi không thể tìm thấy các lớp học nữa. Tôi nên làm gì?Làm thế nào để tổ chức các tệp mã nguồn Python?

Câu hỏi này không phải về MVC but another question with the same title is.

Trả lời

12

Đặt một tệp rỗng __init__.py trong thư mục Mô hình.

Sau đó, trong ứng dụng của bạn; có lẽ lên mức trên, bạn tham khảo các module trong thư mục Models như thế này:

import Models 

và làm điều gì đó với nó như thế này:

Models.my_model.MyClassName 

Bạn cũng có thể sử dụng từ khóa from như thế này:

from Models import my_model 

và tham chiếu như sau:

my_model.MyClassName 

Nếu bạn chỉ cần một phương pháp từ một mô-đun, bạn cũng có thể làm điều này:

from Models.my_model import my_method_name 
my_method_name() 

liên kết bắt buộc để các documentation.

+3

Tôi đã bỏ phiếu cho điều này, với cavet rằng mô-đun và tên gói phải là chữ thường. và các thư mục đó với các tệp ____init____.py là các gói không phải là các mô-đun. –

+0

vấn đề với việc chia lớp thành các tệp khác nhau trong Python là tôi phải thêm tiền tố mô-đun vào bất cứ nơi nào tôi sử dụng nó. Điều này là cồng kềnh và nó không xảy ra trong C# –

+0

@Jader: Bạn có thể tránh phải làm điều này bằng cách nhập các lớp cụ thể mà bạn cần một cách rõ ràng với 'từ mô-đun nhập ClassName'. – bernie

1

Adam Bernier cung cấp mô tả kỹ thuật tốt về cách thức hoạt động của gói. Mô tả tuyệt vời về cách sắp xếp và giao một dự án được mô tả trong http://jcalderone.livejournal.com/39794.html

4

Để trả lời nhận xét của bạn về câu trả lời của Adam, về việc có 10 lần nhập cho 10 lớp, trước hết đừng quên có một lớp cho mỗi mô-đun bằng Python. Mô-đun phải được tổ chức theo chức năng, do đó bạn có thể nhóm các lớp liên quan trong một tệp nếu điều đó có ý nghĩa.

Nếu bạn vẫn muốn làm cho tất cả các lớp học có thể nhập cảng trong một đi, bạn có thể nhập tất cả trong __init__.py tập tin riêng của mình bằng cách sử dụng cú pháp from submodule import Class, sau đó chỉ cần nhập các module tích hợp - import mainmodule và tham khảo mainmodule.Class1 vv, hoặc thậm chí sử dụng from mainmodule import Class1, Class2, Class3 để nhập trực tiếp các lớp vào không gian tên của bạn và trực tiếp tham khảo chúng.

Các vấn đề liên quan