Tôi sẽ không đồng ý với những người khác và nói có. Đối với tôi, tôi đã thành công hơn trong việc đưa từng lớp vào một tệp riêng (mô-đun). Nhưng có những ngoại lệ vì vậy hãy để tôi giải thích bằng một ví dụ.
Nếu bạn có một lớp Foo, sau đó đặt nó trong một tập tin gọi là Foo.py, với các phần sau:
- Imports
- Đây là nơi bạn kéo vào phụ thuộc.
- Ví dụ:
import math
, from Bar import *
- Globals
- Đây là nơi bạn xác định các giao diện bên ngoài để mô-đun của bạn, đó là tất cả những biểu tượng nằm ngoài nhìn thấy được của mô đun này.
- Ví dụ:
__all__ = ['Foo']
- Đây cũng là nơi bạn có thể xác định biến toàn cầu (xấu) và hằng số toàn cục (tốt). Những hình cầu này không cần xuất khẩu; chúng có thể được tạo ra toàn cầu chỉ để đơn giản hóa mã.
- Ví dụ:
PI = 3.14159
có nghĩa là bạn có thể viết PI
, trong khi nếu bạn đã xác định nó trong lớp Foo thì bạn sẽ cần phải viết Foo.PI
.
- Chức năng
- Đây là nơi bạn xác định tất cả các chức năng cấp cao có liên quan đến lớp Foo, nhưng không thuộc trong lớp Foo namespace. Đây có thể là hiếm vì các lớp học cho phép cả hai lớp
@staticmethods
và lớp bên trong.
- Ví dụ:
def print_foo(foo): print(foo)
- Lớp
- Ví dụ:
class Foo(object): pass
Đôi khi bạn sẽ muốn đặt nhiều hơn một lớp trong mô-đun tương tự. Bạn nên làm điều này bất cứ khi nào hai hay nhiều lớp liên quan đến khái niệm đến điểm mà bạn hầu như luôn luôn sử dụng chúng cùng nhau và không bao giờ độc lập. Đây là ngoại lệ, không phải là tiêu chuẩn. Trong trường hợp này, hãy thêm tất cả các tên lớp vào __all__
toàn cầu.
Cuối cùng, đối với mỗi mô-đun Foo.py, phải có một mô-đun thử nghiệm đơn vị tương ứng được gọi là testFoo.py.
Nguồn
2011-01-12 18:25:31
Đến từ Java Tôi đã có cùng một câu hỏi này, cậu bé đã nhầm lẫn trong một thời gian. :-) – snarkyname77
Thật thú vị, PyDev cung cấp cho bạn tùy chọn để thực hiện điều đó. – Uri
Nếu bạn nhập một lớp từ một tệp có nhiều lớp, liệu trình thông dịch có thực thi tất cả các lớp trong tệp đó không? –