Nó hoạt động tốt đối với lớp được định nghĩa trong
__all__ = ['MyClass01','MyClass02']
2. Nhưng với giải pháp này nếu có nhiều lớp được xác định trong các tệp khác nhau trong __all__ = ['MyClass01','MyClass02']
5 và tôi muốn nhập tất cả chúng, tôi phải nhập một dòng cho mỗi tệp. Phải có một phím tắt cho việc này. tôi đã thửfrom subdir.* import *
Nhưng nó đã không thành công
CHỈNH SỬA. đây là nội dung của các tập tin
Đây là
__all__ = ['MyClass01','MyClass02']
6 [sử dụng __all__ = ['MyClass01','MyClass02']
7 như Apalala đề xuất]__all__ = ['MyClass01','MyClass02']
Đây là
__all__ = ['MyClass01','MyClass02']
2class MyClass01:
def printsomething[]:
print 'hey'
Đây là
__all__ = ['MyClass01','MyClass02']
3class MyClass02:
def printsomething[]:
print 'sup'
Đây là
class MyClass01:
def printsomething[]:
print 'hey'
0__all__ = ['MyClass01','MyClass02']
1Đây là truy nguyên mà tôi nhận được khi tôi cố chạy
class MyClass01:
def printsomething[]:
print 'hey'
0__all__ = ['MyClass01','MyClass02']
3Giải pháp tốt nhất
Mặc dù tên được sử dụng ở đó khác với tên được hiển thị trong cấu trúc thư mục câu hỏi của bạn, nhưng bạn có thể sử dụng câu trả lời của tôi cho câu hỏi có tiêu đề Không gian tên và các lớp.
__all__ = ['MyClass01','MyClass02']
6 được hiển thị ở đó cũng sẽ cho phép tập lệnh class MyClass01:
def printsomething[]:
print 'hey'
3 được viết theo cách này [class MyClass01:
def printsomething[]:
print 'hey'
4 ánh xạ tới __all__ = ['MyClass01','MyClass02']
5 trong câu hỏi của bạn và class MyClass01:
def printsomething[]:
print 'hey'
6 tới class MyClass01:
def printsomething[]:
print 'hey'
7, v.v.]from subdir.* import *
0Sửa đổi [cập nhật]
Rất tiếc, mã trong câu trả lời khác của tôi không hoàn toàn làm những gì bạn muốn — nó chỉ tự động nhập tên của bất kỳ mô hình con gói nào. Để làm cho nó cũng nhập các thuộc tính được đặt tên từ mỗi mô hình con cần thêm một vài dòng mã. Đây là phiên bản sửa đổi của tệp
__all__ = ['MyClass01','MyClass02']
6 của gói [cũng hoạt động trong Python 3. 4. 1]from subdir.* import *
2Ngoài ra, bạn có thể đặt ở trên vào một riêng biệt. py của riêng nó trong thư mục gói—chẳng hạn như
class MyClass01:
def printsomething[]:
print 'hey'
9—và sử dụng nó từ __all__ = ['MyClass01','MyClass02']
6 của gói như thế nàyfrom subdir.* import *
50Dù bạn đặt tên cho tệp là gì, nó phải là thứ bắt đầu bằng ký tự gạch dưới
class MyClass02:
def printsomething[]:
print 'sup'
1 để nó không cố gắng đệ quy chính class MyClass02:
def printsomething[]:
print 'sup'
2Giải pháp liên quan
Python – Nhập mô-đun từ thư mục mẹ
Bạn có thể sử dụng nhập tương đối [python >= 2. 5]
from subdir.* import *
51[Có gì mới trong Python 2. 5] PEP 328. Nhập khẩu tuyệt đối và tương đối
CHỈNH SỬA. đã thêm một dấu chấm khác '. ' để tăng hai gói
Python – Cách nhập các tệp Python khác
Có nhiều cách để nhập tệp python, tất cả đều có ưu và nhược điểm của chúng
Đừng vội vàng chọn chiến lược nhập đầu tiên phù hợp với bạn, nếu không bạn sẽ phải viết lại cơ sở mã sau này khi bạn thấy nó không đáp ứng nhu cầu của mình
Tôi sẽ bắt đầu giải thích ví dụ #1 đơn giản nhất, sau đó tôi sẽ chuyển sang ví dụ #7 chuyên nghiệp và mạnh mẽ nhất
Ví dụ 1, Nhập mô-đun python bằng trình thông dịch python
Đặt cái này vào /home/el/foo/fox. py
52from subdir.* import *
Vào trình thông dịch python
53from subdir.* import *
Bạn đã nhập fox thông qua trình thông dịch python, gọi hàm python
3 từ bên trong fox. pyclass MyClass02: def printsomething[]: print 'sup'
Ví dụ 2, Sử dụng
class MyClass02:
def printsomething[]:
print 'sup'
4 hoặc [class MyClass02:
def printsomething[]:
print 'sup'
5 trong Python 3] trong tập lệnh để thực thi tệp python khác tại chỗĐặt cái này vào /home/el/foo2/mylib. py
54from subdir.* import *
Đặt cái này vào /home/el/foo2/main. py
55from subdir.* import *
chạy tập tin
56from subdir.* import *
Chức năng moobar được nhập từ mylib. py và có sẵn trong main. py
Ví dụ 3, Sử dụng từ. nhập khẩu. chức năng
Đặt cái này vào /home/el/foo3/chekov. py
57from subdir.* import *
Đặt cái này vào /home/el/foo3/main. py
58from subdir.* import *
Chạy nó như thế này
59from subdir.* import *
Nếu bạn đã định nghĩa các chức năng khác trong chekov. py, chúng sẽ không khả dụng trừ khi bạn
6class MyClass02: def printsomething[]: print 'sup'
Ví dụ 4, Nhập riaa. py nếu nó ở một vị trí tệp khác với nơi nó được nhập
Đặt cái này vào /home/el/foo4/stuff/riaa. py
0from subdir.* import *
Đặt cái này vào /home/el/foo4/main. py
1from subdir.* import *
chạy nó
2from subdir.* import *
Điều đó nhập mọi thứ trong tệp nước ngoài từ một thư mục khác
Ví dụ 5, sử dụng
class MyClass02:
def printsomething[]:
print 'sup'
7from subdir.* import *
3Ví dụ 6, nhập tệp của bạn qua cõng python startuphook
Cập nhật. Ví dụ này đã từng hoạt động với cả python2 và 3, nhưng hiện tại chỉ hoạt động với python2. python3 đã loại bỏ bộ tính năng startuphook của người dùng này vì nó đã bị lạm dụng bởi những người viết thư viện python có kỹ năng thấp, sử dụng nó để đưa mã của họ vào không gian tên chung một cách bất lịch sự, trước tất cả các chương trình do người dùng xác định. Nếu bạn muốn điều này hoạt động với python3, bạn sẽ phải sáng tạo hơn. Nếu tôi cho bạn biết cách thực hiện, các nhà phát triển python cũng sẽ vô hiệu hóa bộ tính năng đó, vì vậy bạn sẽ tự làm
Nhìn thấy. https. // tài liệu. con trăn. org/2/thư viện/người dùng. html
Đặt mã này vào thư mục nhà của bạn trong
class MyClass02:
def printsomething[]:
print 'sup'
8from subdir.* import *
4Đặt mã này vào chính của bạn. py [có thể ở bất cứ đâu]
from subdir.* import *
5Chạy nó, bạn sẽ nhận được cái này
from subdir.* import *
6Nếu bạn gặp lỗi ở đây.
class MyClass02:
def printsomething[]:
print 'sup'
9 thì có nghĩa là bạn đang sử dụng python3, startuphook bị tắt ở đó theo mặc địnhTín dụng cho jist này đi đến. https. //github. com/doc what/homedir-examples/blob/master/python-command line/. pythonrc. py Gửi dọc theo thuyền của bạn
Ví dụ 7, Mạnh mẽ nhất. Nhập tệp trong python bằng lệnh nhập trần
- Tạo một thư mục mới
10__all__ = ['MyClass01','MyClass02']
- Tạo một thư mục mới
11__all__ = ['MyClass01','MyClass02']
Tạo một tệp trống có tên
6 dưới herp__all__ = ['MyClass01','MyClass02']
7from subdir.* import *
Tạo một thư mục mới /home/el/foo5/herp/derp
Dưới derp, tạo một tệp
6 khác__all__ = ['MyClass01','MyClass02']
8from subdir.* import *
Trong /home/el/foo5/herp/derp tạo một tệp mới có tên là
14 Đặt tệp này vào đó__all__ = ['MyClass01','MyClass02']
9from subdir.* import *
Khoảnh khắc của sự thật, Tạo tệp mới
15, đặt cái này vào đó;__all__ = ['MyClass01','MyClass02']
0__all__ = ['MyClass01','MyClass02']
chạy nó
1__all__ = ['MyClass01','MyClass02']
Tệp
6 trống giao tiếp với trình thông dịch python mà nhà phát triển dự định thư mục này là một gói có thể nhập__all__ = ['MyClass01','MyClass02']
Nếu bạn muốn xem bài đăng của tôi về cách bao gồm TẤT CẢ. py trong một thư mục xem tại đây. https. // stackoverflow. com/a/20753073/445131