2009-04-02 40 views

Trả lời

95

Chỉ cần nib. Đặt tên lớp là Nib, với số vốn N. Để biết thêm về các quy ước đặt tên và lời khuyên về phong cách khác, hãy xem PEP 8, hướng dẫn kiểu Python.

+2

Hầu hết các dự án Python có tuân theo quy ước này không? Bởi vì tôi nhận thấy các lớp được cài sẵn là chữ thường, ví dụ: danh sách, chuỗi, v.v. –

+4

Bạn quan sát w.r.t. các kiểu dựng sẵn là chính xác. Đây là những ngoại lệ quyết định. Hầu hết các lớp khác được định nghĩa trong thư viện chuẩn * đều được viết hoa. – Stephan202

+2

Tôi nghĩ đây là quy ước chính xác, nhưng có một vấn đề cố hữu với nó, ít nhất nó có vẻ như với tôi. Nói rằng tôi có một lớp được gọi là 'Client', và dễ hiểu là tôi thường tạo ra các cá thể của nó mà tôi muốn gọi là' client'. Nhưng theo quy ước của bạn, tên mô-đun sẽ là 'client', và vì vậy tôi luôn phải đặt tên cho các cá thể của mình một cái gì đó không tự nhiên như' client_instance'. Bạn nghĩ gì về vấn đề này? – Ray

34

Tôi sẽ gọi nó là nib.py. Và tôi cũng sẽ đặt tên cho lớp là Nib.

Trong dự án python lớn hơn tôi đang làm việc, chúng tôi có rất nhiều mô-đun xác định cơ bản một lớp quan trọng. Các lớp học được đặt tên bắt đầu bằng một chữ cái viết hoa. Các mô-đun được đặt tên giống như lớp trong chữ thường. Điều này dẫn đến việc nhập khẩu như sau:

from nib import Nib 
from foo import Foo 
from spam.eggs import Eggs, FriedEggs 

Giống như mô phỏng cách Java. Một lớp cho mỗi tệp. Nhưng với tính linh hoạt bổ sung, bạn có thể thêm một lớp khác vào một tệp nếu nó có ý nghĩa.

21

nib là tốt. Nếu nghi ngờ, hãy tham khảo hướng dẫn về kiểu Python.

Từ PEP 8:

Package và Module Tên Modules nên có ngắn, tên toàn chữ thường. Dấu gạch dưới có thể được sử dụng trong tên mô-đun nếu nó cải thiện khả năng đọc. Các gói Python nên cũng có tên ngắn, tất cả chữ thường, mặc dù việc sử dụng dấu gạch dưới là không khuyến khích.

Kể từ tên mô-đun được ánh xạ vào tên tập tin, và một số hệ thống tập tin là trường hợp không nhạy cảm và truncate tên dài, điều quan trọng là mô-đun tên được lựa chọn là khá ngắn - điều này sẽ không là một vấn đề trên Unix , nhưng có thể là sự cố khi mã được chuyển sang máy Mac cũ hoặc Phiên bản Windows hoặc DOS.

Khi mô đun mở rộng được viết bằng C hoặc C++ có mô-đun Python kèm theo cung cấp cấp cao hơn (ví dụ: giao diện nhiều hơn) đối tượng , mô-đun C/C++ có dấu gạch dưới hàng đầu (ví dụ: _socket).

+1

uhm ... nó đập vào bụng tôi. Tôi đang sử dụng tiền tố gạch dưới trong gói/mô-đun cho một cái gì đó hoàn toàn khác nhau (monty python tham khảo dự định). –

25

Tôi biết giải pháp của tôi không phải là rất phổ biến từ quan điểm pythonic, nhưng tôi thích sử dụng phương pháp Java của một mô-đun-> một lớp, với mô-đun có tên là lớp. Tôi hiểu lý do đằng sau kiểu python, nhưng tôi không thích có một tệp rất lớn chứa nhiều lớp. Tôi thấy khó duyệt, mặc dù gấp.

Lý do khác là kiểm soát phiên bản: có tệp lớn có nghĩa là các cam kết của bạn có xu hướng tập trung vào tệp đó. Điều này có khả năng có thể dẫn đến một số lượng lớn các xung đột được giải quyết. Bạn cũng mất thông tin nhật ký bổ sung mà cam kết của bạn sửa đổi các tệp cụ thể (do đó liên quan đến các lớp cụ thể). Thay vào đó bạn sẽ thấy một sửa đổi đối với tệp mô-đun, chỉ với nhận xét cam kết để hiểu những sửa đổi đã được thực hiện.

Tổng hợp, nếu bạn thích triết lý python, hãy tìm các đề xuất của các bài đăng khác. Nếu bạn thích triết lý giống như java, hãy tạo Nib.py chứa lớp Nib.

+1

Các vấn đề được đề cập đến là do giới hạn trong trình chỉnh sửa và trong việc sử dụng các công cụ kiểm soát phiên bản, không phải theo ngôn ngữ hoặc kiểu lập trình. Một lớp cho mỗi tệp là bất lợi cho cấu trúc mã. Sử dụng 'spyder' hoặc một trình soạn thảo tương tự để xem tóm tắt các lớp học của bạn để hỗ trợ điều hướng và hai ngăn với cùng một tệp mở trên cả hai. Ngoài ra, vui lòng đọc PEP8. Python dùng để viết Python và Java cho Java, nhưng Python là * not * để viết Java. –

+4

@IoannisFilippidis: Nếu tôi phải đặt tất cả các lớp cho một mô-đun trong một tệp trong các kích thước mã mà tôi thường quản lý, tôi thậm chí không thể mở tệp, va chạm với các đồng nghiệp khác sẽ tăng vọt, và sếp của tôi sẽ nhổ vào khuôn mặt của tôi (nghĩa bóng, đó là nó) để đề xuất nó. Một cách tiếp cận tập tin không quy mô, PEP-8 hay không. –

+0

@StefanoBorini: PEP8 không gọi cho một phương pháp tập tin duy nhất. Một lớp cho mỗi mô-đun và một tệp cho mỗi (đơn vị mã) là hai cực của một phổ rất rộng. Nếu bạn thấy các kích thước tệp lớn không thể quản lý với một tệp cho mỗi mô-đun, bạn có lẽ nên xem xét sửa đổi cách tiếp cận của bạn để chia nhỏ gói thành các mô-đun. –

0

foo mô-đun trong python sẽ là tương đương với một Foo tập tin lớp trong Java

hoặc

foobar mô-đun trong python sẽ là tương đương với một Foobar file class trong Java