Làm thế nào tôi có thể có được một tham chiếu đến một mô-đun từ bên trong mô-đun đó? Ngoài ra, làm thế nào tôi có thể có được một tham chiếu đến gói chứa mô-đun đó?
Làm thế nào tôi có thể có được một tham chiếu đến một mô-đun từ bên trong mô-đun đó? Ngoài ra, làm thế nào tôi có thể có được một tham chiếu đến gói chứa mô-đun đó?
Câu trả lời:
import sys
current_module = sys.modules[__name__]
Một kỹ thuật nữa, không nhập mô-đun sys, và có thể nói - tùy thuộc vào sở thích của bạn - đơn giản hơn:
current_module = __import__(__name__)
Hãy lưu ý rằng không có nhập khẩu. Python chỉ nhập mỗi mô-đun một lần.
Nếu bạn có một lớp trong mô-đun đó, thì thuộc __module__
tính của lớp là tên mô-đun của lớp. Do đó bạn có thể truy cập các mô-đun thông qua sys.modules[klass.__module__]
. Đây cũng là công trình cho các chức năng.
__module__
tính không phải là một mô-đun, mà là một chuỗi; do đó, inspect.getabsfile(func.__module__)
thất bại với " TypeError: 'os' không phải là mô-đun, lớp, phương thức, chức năng, truy nguyên, khung hoặc đối tượng mã "; Trong khi inspect.getabsfile(sys.modules[o.__module__])
dường như vượt qua.
Bạn có thể vượt qua nó từ bên ngoài:
mymod.init(mymod)
Không lý tưởng nhưng nó hoạt động cho trường hợp sử dụng hiện tại của tôi.