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?
10
A
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 đó.
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
- 1. Làm thế nào để có được cá thể chứa trong lớp quản trị sonata?
- 2. Làm thế nào để một lớp trừu tượng "DocumentBuilderFactory" được phép tạo nhanh cá thể mới
- 3. Làm thế nào để sử dụng đa xử lý với các cá thể lớp trong Python?
- 4. Làm thế nào để môđun hóa ứng dụng JSF/Facelets/Spring bằng OSGi?
- 5. Làm thế nào để tạo một trình trang trí lớp Python có thể bọc các cá thể, lớp và các phương thức tĩnh?
- 6. Làm thế nào để "gọi" một cá thể lớp trong PHP?
- 7. Làm thế nào tôi có thể tìm thấy một cá thể metaobt Qt từ một tên lớp?
- 8. Làm cách nào để có được thuộc tính hệ thống cho một cá thể JVM cụ thể theo lập trình?
- 9. Python: có trường hợp sử dụng nào để thay đổi lớp của cá thể không?
- 10. Làm cách nào để gán một thuộc tính cho một thể hiện bằng Python?
- 11. Có cách nào trong scala để tạo ra một cá thể chung mà không có một cá thể ví dụ?
- 12. Làm thế nào để tạo cá thể mặc định sau khi tạo một cá thể có tên?
- 13. Làm thế nào để có được (sub) tên lớp từ một phương pháp tĩnh trong Python?
- 14. Làm thế nào để lập trình được các dns công khai của một cá thể?
- 15. Làm cách nào để thiết kế một lớp bằng Python?
- 16. Làm thế nào để biến một thể hiện Động vật thành một cá thể Dog?
- 17. Làm thế nào để python ngăn chặn một lớp được phân lớp?
- 18. Làm thế nào tôi có thể làm cho một lớp lót này hoạt động trong DOS?
- 19. OOP python - loại bỏ cá thể lớp khỏi danh sách
- 20. Làm thế nào để mở rộng một lớp trong python?
- 21. Làm thế nào để sắp xếp một mảng chứa các đối tượng lớp bằng một giá trị thuộc tính của một cá thể lớp?
- 22. Tôi có thể xác định __repr__ cho một lớp chứ không phải là một cá thể không?
- 23. Làm cách nào để có được tên múi giờ có thể đọc được bằng Python?
- 24. Biến cá thể so với biến lớp trong Python
- 25. Làm thế nào tôi có thể chạy mã trong định nghĩa lớp C# mỗi khi bất kỳ cá thể nào của lớp được deserialized?
- 26. Có cách nào để có được một cá thể System.Configuration.Configuration dựa trên xml tùy ý không?
- 27. Hiển thị một cá thể lớp C++ tới một trình thông dịch nhúng python
- 28. Trong Java, làm thế nào tôi có thể kiểm tra xem một bộ sưu tập có chứa một cá thể của một lớp cụ thể không?
- 29. Làm thế nào để tìm ngoại lệ có thể được nâng lên cho một mô-đun cụ thể trong Python?
- 30. Làm thế nào để khởi tạo một thể hiện của một phân lớp của bộ tuple bằng Python?
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ó. –
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. –
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. –