2012-01-16 17 views
5

Tôi có một tập tin helpers.py trong đó xác định khoảng 30 chức năng helper được xuất khẩu như sau:Tự động xuất khẩu tất cả các chức năng (vs tay định __all__)

from helpers import * 

Để có thể làm được điều này, tôi đã thêm tất cả 30 chức năng với biến số __all__. Tôi có thể tự động có tất cả các chức năng được xuất, thay vì phải chỉ định từng chức năng không?

+0

Tôi cho rằng có một số phương pháp phi xuất khẩu của bạn helpers.py, nếu không '__all__' sẽ không hữu ích ... –

+2

Nếu bạn không xác định' __all__', tất cả tên công khai (những ký tự không bắt đầu bằng ký tự gạch dưới '_') sẽ được nhập bởi câu lệnh . – martineau

Trả lời

13

Có, đơn giản là không chỉ định __all__.

7

Thật sự tôi nghĩ Gandaro là đúng, bạn không cần phải chỉ định __all__, nhưng nếu vì một lý do không rõ, bạn sẽ phải làm điều đó rồi, bạn có thể lọc từ khóa từ dir():

__all__ = [ helper for helper in dir() if helper == MY_CONDITION ] 
+0

Điểm tốt. Trong thực tế, bạn có thể xác định nội dung của '__all__' một cách phức tạp hơn trong mô-đun của bạn nếu muốn - nghĩa là bạn không bị giới hạn trong một câu lệnh đơn lẻ. – martineau

6

Nếu bạn không xác định __all__ sau đó tất cả các chức năng trong mô-đun của bạn sẽ được nhập bằng cách gọi from helpers import *

Nếu bạn đã có một số chức năng mà bạn muốn giữ riêng tư, sau đó bạn có thể thêm tiền tố tên của họ với dấu gạch dưới. Từ thử nghiệm của tôi, điều này dừng các chức năng từ được nhập khẩu bởi import *

Ví dụ, trong helper.py:

def _HiddenFunc(): 
    return "Something" 

def AnActualFunc(): 
    return "Hello" 

Sau đó:

>>> from helper import * 
>>> AnActualFunc() 
'Hello' 
>>> _HiddenFunc() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '_HiddenFunc' is not defined 
Các vấn đề liên quan