2009-06-13 18 views
91

Những gì tôi đang cố gắng để làm sẽ trông như thế này trong các dòng lệnh:Làm thế nào để có được một tham chiếu đến thuộc tính hiện tại mô-đun trong Python

>>> import mymodule 
>>> names = dir(mymodule) 

Làm thế nào tôi có thể nhận được một tham chiếu đến tất cả các tên được định nghĩa trong mymodule từ bên trong số mymodule?

Something như thế này:

# mymodule.py 
names = dir(__thismodule__) 

Trả lời

103

Chỉ cần sử dụng globals()

globals() - Quay trở lại một cuốn từ điển đại diện cho biểu tượng toàn cầu hiện nay bảng. Đây luôn là từ điển của mô-đun hiện tại (bên trong hàm hoặc phương pháp, đây là mô-đun nơi được xác định, không phải mô-đun mà từ đó nó được gọi).

http://docs.python.org/library/functions.html#globals

+3

Có cách nào để truy cập vào gloabals() của mô-đun gọi điện, thay vì mô-đun xác định không? – dimo414

+5

Bạn có thể thử lấy các hình cầu của người gọi từ mô-đun truy nguyên (http://docs.python.org/library/traceback.html), nhưng điều này đang thâm nhập vào lãnh thổ ma thuật tối. Tôi không biết những gì bạn đang cố gắng làm, nhưng bạn có thể muốn suy nghĩ lại thiết kế của bạn nếu bạn cần. –

10

Ngoài ra kiểm tra được xây dựng trong inspect module. Nó có thể rất tiện dụng.

+1

Một ví dụ sử dụng có liên quan được mong đợi. Liên kết có thể bị thối không để lại giá trị nào ở đây. – IAbstract

121

Như đã đề cập trước đây, hình cầu cung cấp cho bạn một từ điển trái ngược với dir() cung cấp cho bạn danh sách các tên được xác định trong mô-đun. Cách tôi thường thấy việc này được thực hiện như sau:

import sys 
dir(sys.modules[__name__]) 
+1

Tôi sẽ thêm một nhận xét rằng điều này sẽ không hoạt động cho mô-đun '__main__' (đó là mô-đun chạy tại thiết bị đầu cuối được gọi) vì điều đó dường như không được liệt kê trong sys.modules - nhưng nó thực sự công việc :) – markm

+0

Tuy nhiên, nó dường như không hoạt động từ ipdb (chèn "nhập ipdb; ipdb.set_trace()" vào tệp của bạn). – gatoatigrado

+9

Tuyệt vời! Điều này chỉ cho phép tôi sử dụng chuỗi tài liệu của mô-đun hiện tại làm thông báo sử dụng - 'sys.modules [__ name __] .__ doc__'. – george

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