2009-10-05 28 views
10

Tôi đang học Python, và như mọi khi, tôi đang tham vọng với các dự án khởi động của mình. Tôi đang làm việc trên một hệ thống plugin cho bộ công cụ trang web cộng đồng cho App Engine. Lớp siêu lớp plugin của tôi có một phương thức có tên là install_path. Tôi muốn lấy số __path__ cho số __module__ cho self (trong trường hợp này sẽ là phân lớp). Vấn đề là, __module__ trả về một str thay vì bản thân mô-đun. eval() là không đáng tin cậy và không mong muốn, vì vậy tôi cần một cách tốt để có được bàn tay của tôi trên mô-đun thực tế mô-đun không liên quan đến eval ling các str Tôi lấy lại từ __module__.Làm thế nào để có được cá thể mô-đun cho một lớp bằng Python?

Trả lời

11

Các sys.modules dict chứa tất cả các module nhập khẩu, vì vậy bạn có thể sử dụng:

mod = sys.modules[__module__] 
1

Làm thế nào về Importing modules

X = __import__(‘X’) công trình như import X, với sự khác biệt mà bạn 1) vượt qua tên module như là một chuỗi, và 2) một cách rõ ràng gán nó vào một biến trong không gian tên hiện tại của bạn.

Bạn có thể chuyển tên mô-đun (thay vì 'X') và lấy lại cá thể mô-đun. Python sẽ đảm bảo rằng bạn không nhập cùng một mô-đun hai lần, vì vậy bạn nên lấy lại cá thể mà bạn đã nhập trước đó.

+0

Vâng, điều này dường như không hoạt động. Tôi đang hy vọng cho một giải pháp sạch hơn, nhưng nếu không có gì khác đi cùng, tôi sẽ chấp nhận nó. –

+0

Lưu ý rằng nếu bạn làm '__import __ ('foo.bar')', nó sẽ trả về mô-đun 'foo', không phải' foo.bar'. Xem tài liệu '__import__' để biết chi tiết. –

+0

Vâng, có một vài lý do chính đáng để giải pháp của Lukas tốt hơn nhiều. –

1

Ngoài ra, bạn có thể sử dụng các mô-đun của toàn cầu __file__ variable nếu tất cả các bạn muốn là con đường của module.

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