Tôi có cấu trúc thư mục sau:Python - Năng động, lớp nhập khẩu
- MyProject
- App1
- some_module1.py
- some_module2.py
- App2
- some_other_module1.py
- some_other_module2.py
Bên trong mỗi mô-đun (some_module1.py ví dụ) có một lớp học kéo dài từ một lớp cơ sở, trong trường hợp của tôi, Nhà sản xuất .
Điều tôi đang cố làm là tải động trong lớp này. Để làm điều đó, tôi có một danh sách các "ứng dụng được cài đặt" trông như thế này:
INSTALLED_APPS = (
'App1',
'App2',
)
Tôi cố gắng để viết một chức năng mà sẽ kiểm tra từng "ứng dụng" gói cho một lớp sản xuất nói riêng và đảm bảo nó kéo dài từ lớp cơ sở sản xuất. Một cái gì đó như thế này:
module_class = 'some_module1.SomeClass'
# Loop through each package in the INSTALLED_APPS tuple:
for app in INSTALL_APPS:
try:
#is the module_class found in this app?
#App1.some_module1.SomeClass - Yes
#App2.some_module1.SomeClass - No
# is the class we found a subclass of Producer?
exception ImportError:
pass
Tôi đã thử nghiệm với imp và importlib, nhưng dường như không xử lý loại nhập này. Có anyway cho tôi để có thể đạt được điều này?
Xin lỗi - bạn không thể tìm ra điều bạn muốn - mã giả của bạn không rõ ràng. Python không quan tâm đến các lớp abse đến từ đúng nơi, làm thế nào. Vì vậy, bất kỳ App1.Class_ sẽ thấy "Nhà sản xuất" vì nó được xác định bên trong mô-đun App1. – jsbueno
Xin lỗi, tôi đã cố gắng rõ ràng nhất có thể. Tôi đã chỉnh sửa bài đăng và hy vọng nó có ý nghĩa hơn. – Hanpan