Tôi sử dụng __init__.py
để chạy séc khi tôi làm from myprojects.something import blabla
.cách sử dụng __init__.py
Hôm nay tôi bắt đầu sử dụng pyzmq
và tôi muốn xem điều gì đang diễn ra đằng sau hậu trường. Vì vậy, tôi duyệt mã trong github và tôi tìm thấy (đối với tôi) một số cách sử dụng kỳ lạ của __init__.py
ở đó mà tôi không thể giải thích bản thân mình.
Ví dụ: zmq/core/__init__.py
. Điểm bổ sung trong số zmq.core.__all__
giá trị zmq.core.constants, zmq.core.error, zmq.core.message, etc.
của __all__
là gì?
Trong zmq/__init__.py
tôi nhìn thấy ở phần cuối
__all__ = ['get_includes'] + core.__all__
nơi get_includes
là một chức năng cơ bản mà trả về một danh sách với các thư mục của các mô-đun và thư mục utils trong thư mục cha.
Điểm của điều đó là gì? Điều gì đã __init.py__
đạt được bằng cách làm điều đó?
Tôi đã đọc phần tài liệu này trước khi hỏi tại đây. Nhưng điều này vẫn không trả lời câu hỏi của tôi. Có lẽ tôi nên hỏi theo cách khác: Tôi cho rằng lý do sử dụng 'từ bla import ble' là bạn đã kiểm soát không gian tên của mình, có nghĩa là bạn quyết định ký hiệu nào bạn thêm vào namesapce của mình. – Pablo
Ngược lại với C khi sử dụng '# include' có thể gây ra va chạm với các hàm đã được định nghĩa, các biến, vv, bạn chỉ nên nhập các ký hiệu mà bạn thực sự cần. Tôi mặc dù tôi đọc một nơi nào đó trong tài liệu python sử dụng 'từ bla import *' không phải là một thói quen tốt. Nếu vậy, thì tại sao bận tâm định nghĩa '__ all__'? Và cách '__all__ = ['get_includes'] + core .__ all__' được đánh giá khi thực hiện' import * '? – Pablo
từ nhập khẩu bla * không phải là một thói quen tốt để có được, nhưng có một số mô-đun mà nói chung là an toàn. Tôi thường làm từ nhập khẩu toán học *. Các tài liệu của các mô-đun này thường chỉ ra rằng chúng được thiết kế để được sử dụng theo cách đó và chúng hỗ trợ các niceties như __all__ để làm cho nó dễ dàng hơn một chút. Nhưng từ x import * là stil một cái gì đó để được sử dụng một cách thận trọng và chỉ với các gói mà bạn biết nó sẽ không gây ra một vấn đề. – TimothyAWiseman