Là một bình luận đã chỉ ra, trong Python hiện nay cách ưa thích để nhanh chóng loại mà không có built-in tên là gọi loại thu được thông qua các mô-đun types từ thư viện tiêu chuẩn:
>>> import types
>>> m = types.ModuleType('m', 'The m module')
lưu ý rằng điều này không không tự động chèn các module mới trong sys.modules
:
>>> import sys
>>> sys.modules['m']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'm'
Đó là một nhiệm vụ bạn phải thực hiện bằng tay:
>>> sys.modules['m'] = m
>>> sys.modules['m']
<module 'm' (built-in)>
Đây có thể là quan trọng, vì đối tượng mã của một mô-đun thông thường thực hiện sau của thêm vào sys.modules
mô-đun - ví dụ, nó hoàn toàn chính xác cho ví dụ mã để tham chiếu đến sys.modules[__name__]
và điều đó sẽ không thành công (KeyError
) nếu bạn quên bước này. Sau bước này, và thiết lập m.__file__
như bạn đã có trong chỉnh sửa của bạn,
>>> code = compile("a=23", "m.py", "exec")
>>> exec code in m.__dict__
>>> m.a
23
(hoặc Python 3 tương đương, nơi exec
là một chức năng, nếu Python 3 là những gì bạn đang sử dụng, tất nhiên; -) là chính xác (tất nhiên, bạn thường sẽ thu được đối tượng mã bởi subtler có nghĩa là biên dịch một chuỗi, nhưng đó không phải là tài liệu cho câu hỏi của bạn ;-).
Trong các phiên bản cũ của Python bạn đã có thể sử dụng các mô-đun new
thay vì các mô-đun types
để làm cho một đối tượng mô-đun mới vào lúc bắt đầu, nhưng new
bị phản đối từ Python 2.6 và loại bỏ trong Python 3.
Việc tiếp cận ưa thích điểm cho loại mô-đun là 'types.ModuleType'. –