2010-08-25 33 views
9

Vì vậy, tôi có một lớp trong một mô-đun có một số phương thức tĩnh. Một vài phương thức tĩnh này chỉ thực hiện kiểm tra crc và các công cụ, và chúng không thực sự hữu ích bên ngoài lớp (tôi chỉ làm cho chúng phương thức tĩnh riêng tư trong java hoặc C++). Tôi tự hỏi nếu tôi thay vào đó nên làm cho họ chức năng lớp học toàn cầu (bên ngoài của lớp).Phương thức tĩnh và hàm mô-đun trong python

Có lợi ích gì khi thực hiện theo cách này không? Lớp đang được nhập bởi from module import class vì vậy tôi không lo lắng về việc có những mô-đun kéo vào là tốt. Nhưng tôi có nên làm cho họ phương pháp lớp học để from module import * là an toàn hơn hoặc một cái gì đó?

Trả lời

7

Tiền tố tên hàm bằng dấu gạch dưới đơn là quy ước để nói rằng chúng là riêng tư và cũng sẽ ngăn không cho chúng được nhập bằng from module import *.

kỹ thuật khác là để xác định một danh sách __all__ trong module - điều này chỉ có thể được thực hiện trong các module chính nó (bạn không cần một tập tin __init__.py)

__all__ = ['my_class_name'] 

Đây là chi tiết của một cách tiếp cận danh sách trắng, để bạn có thể kiểm soát toàn bộ nội dung được nhập mà không sử dụng dấu gạch dưới hàng đầu. Vì vậy, trừ khi các phương pháp của bạn thuộc về mặt logic trong lớp, và từ mô tả của bạn, chúng tôi sẽ để chúng như các hàm mức mô-đun và sử dụng một trong hai phương pháp này để đặt chúng ở chế độ riêng tư.

+0

Tôi không biết về '__all__'. Thanks =] – Falmarri

3

Đặt các chức năng cấp mô-đun và thêm tiền tố vào một dấu gạch dưới để người tiêu dùng hiểu rằng chúng được sử dụng riêng tư.

3

Nếu chúng không hữu ích bên ngoài lớp học, động lực để làm cho chúng phương pháp mô-đun là gì? Giữ chúng như là phương pháp tĩnh làm cho không gian tên sạch hơn.

Lợi thế duy nhất để di chuyển nó ra bên ngoài có thể để mọi người có thể tham khảo chúng mà không sử dụng đủ điều kiện cho họ tên lớp. Giả sử bạn có phương thức nhật ký có tham chiếu trong nhiều địa điểm, điều này có thể có ý nghĩa như một lựa chọn phong cách.

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