2010-05-18 33 views
8

Tôi xin lỗi vì câu hỏi __init__.py khác.Cách truy cập __init__.py biến từ các phần sâu hơn của gói

tôi có cấu trúc gói sau:

+contrib 
    +--__init__.py 
    | 
    +database 
     +--__init__.py 
     | 
     +--connection.py 

Trong top-level __init__.py tôi xác định: USER='me'. Nếu tôi import contrib từ dòng lệnh, thì tôi có thể truy cập contrib.USER.

Bây giờ, tôi muốn truy cập contrib.user từ withih connection.py nhưng tôi không thể làm điều đó.

Cấp cao nhất __init__.py được gọi khi tôi phát hành from contrib.database import connection, vì vậy Python thực sự đang tạo thông số USER.

Vì vậy, câu hỏi đặt ra là: cách bạn truy cập vào các tham số và biến được khai báo ở cấp cao nhất __init__.py từ trong số trẻ em.

Cảm ơn bạn.

EDIT:

Tôi nhận ra rằng bạn có thể thêm import contrib-connection.py, nhưng có vẻ như lặp đi lặp lại, vì nó là rõ ràng (không đúng như vậy?) Rằng nếu bạn cần connection.py bạn đã nhập khẩu contrib.

Trả lời

12

Thêm import contrib đến connection.py là cách để thực hiện. Có, mô-đun contrib đã được nhập (bạn có thể tìm hiểu từ sys.modules). Vấn đề là không có tham chiếu đến các mô-đun từ mã của bạn trong connection.py. Thực hiện một lần nhập khác sẽ cung cấp cho bạn tham chiếu. Bạn không cần phải lo lắng về thời gian tải thêm vì mô-đun đã được tải.

+0

Về lý thuyết, bạn có thể lấy nó ra khỏi 'sys.modules', vì bạn biết nó ở đó, nhưng tôi sẽ * mạnh mẽ khuyên * chống lại việc đó. Câu trả lời của Wai Yip Tung là tốt hơn nhiều. – Kevin

0

Bạn cần nhập contrib trong connection. Sử dụng nhập tương đối (..contrib) hoặc nhập tuyệt đối.

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