Mã Python được tổ chức trong các thư mục được gọi là gói chứa các tệp
from package_name.module_name import ClassName
4 có tên là from package_name.module_name import ClassName
5. Trong bài viết này, tôi trình bày một thủ thuật để tự động nhập trong gói cấp cao nhất tất cả các lớp được định nghĩa trong các mô hình con. Điều này rút ngắn các câu lệnh nhập để thuận tiện cho người dùng cuối. cụ thể làfrom package_name import ClassName
thay vì
from package_name.module_name import ClassName
Vấn đề ở đây là gì?
Tôi cần điều này trong khi tạo trình tạo blog tĩnh của mình. Trình tạo được tổ chức dưới dạng một đường dẫn chuyển đổi lấy các tệp đánh dấu làm đầu vào và tạo một blog html làm đầu ra. Hơi giống với kiến trúc dựa trên plugin, tôi quyết định triển khai từng bước của quy trình trong tệp riêng. Cấu trúc của dự án như sau
calepin
├── pipeline.py
├── processors
├── __init__.py
├── processor_1.py
├── ...
└── processor_50.py
Và bên trong
from package_name.module_name import ClassName
0, mục tiêu là viếtđường dẫn. py ______4
Hoặc thậm chí
đường dẫn. py ______5
Thay vì
đường dẫn. py ______6
Tất nhiên, trong một dự án python điển hình, tôi sẽ phản đối việc sử dụng
from package_name.module_name import ClassName
1. Nhưng đối với dự án máy phát điện của tôi, mẫu thiết kế rất rõ ràng. xác định một quy trình, thực hiện tất cả các bước của nó trong gói phụ from package_name.module_name import ClassName
2. Vì vậy, khá an toàn để from package_name.module_name import ClassName
1 tất cả các bướcCó một số cách để đạt được điều này trong python. Chẳng hạn, tôi có thể đã sử dụng móc nhập trong tệp
from package_name.module_name import ClassName
0. Nhưng tôi chọn sử dụng gói con from package_name.module_name import ClassName
5 để nhập động tất cả các lớp có trong các mô hình con của nó. Đây là cáchTự động nhập tất cả các lớp trong gói
Mã được xây dựng dựa trên các tài nguyên này
Đặt cái này vào
from package_name.module_name import ClassName
6 và bạn đã sẵn sàng để đibộ xử lý/__init__. py ______13
Trình tải cho kiến trúc plugin
Nhân tiện, một cách hay để tải tất cả các plugin trong một thư mục là để chúng mở rộng lớp cơ sở
from package_name.module_name import ClassName
7, sau đó tải động các lớp con của nó Trong bài viết này, chúng ta sẽ hiểu nhu cầu lập trình mô-đun và sau đó sẽ tìm hiểu cách Nhập các lớp từ một tệp khác bằng ngôn ngữ lập trình python. Chúng ta sẽ thảo luận một số ví dụ để hiểu chúng rõ ràng hơn. Chúng tôi cũng sẽ hiểu các thư viện được xác định trước giúp chúng tôi như thế nào. Vậy hãy bắt đầu
nội dung
- Tại sao nó cần thiết?
- Lập trình hướng đối tượng hoặc OOP
- Lập trình mô-đun
- Lợi thế của việc sử dụng Lập trình mô-đun
- Giới thiệu về Báo cáo nhập khẩu
- Nhập các lớp từ một tệp khác
- Nhập tất cả các lớp từ tệp khác
- Nhập các lớp từ một thư mục khác
- Nhập các lớp từ các thư viện được xác định trước
- câu hỏi thường gặp
- Sự kết luận
- Xu hướng bài viết Python
Tại sao nó cần thiết?
Vì vậy, câu hỏi đầu tiên xuất hiện trong đầu chúng ta là tại sao chúng ta cần nhập bất kỳ tệp hoặc lớp nào từ một tệp khác?
Đầu tiên, hiểu tại sao nó cần thiết? . Viết mã cho chúng mọi lúc là một công việc khá tẻ nhạt. Để tránh những tình huống như vậy, chúng tôi sử dụng khái niệm Lập trình hướng đối tượng hay còn gọi là OOP
Lập trình hướng đối tượng hoặc OOP
OOP là một khái niệm lập trình trong đó chúng ta tạo các đối tượng dựa trên một số lớp đã xác định có một số thuộc tính [được gọi là thuộc tính] và hàm [được gọi là phương thức]. Ưu điểm của việc đó là chúng ta có thể tái sử dụng nó nhiều lần nếu muốn. Chúng tôi cũng có thể thực hiện các thực thể thời gian thực khác như thừa kế [ i. e. kế thừa các thuộc tính từ các lớp khác], trừu tượng hóa [ i. e. che giấu thông tin], đa hình [i. e. hiện diện dưới nhiều hình thức] e. t. c. trong đó. Bản thân nó là một khái niệm độc lập, vì vậy chúng ta sẽ nói về nó sau. Bây giờ, hãy tiếp tục và nói về lập trình mô-đun
Lập trình mô-đun
Mặc dù, OOP là một cách lập trình hiệu quả và thông minh, nhưng chúng ta không thể nói rằng nó tự giải quyết tất cả các vấn đề. Bên cạnh khái niệm cốt lõi về OOP, có một số vấn đề khác mà chúng ta gặp phải khi lập trình. Làm việc trên các kịch bản thực tế rất khác với kịch bản mà chúng ta học. Trong thực tế, giải quyết bất kỳ vấn đề nào có thể yêu cầu hàng nghìn dòng mã có thể có hàng trăm chức năng và hàng chục lớp. Duy trì tất cả các hàm và lớp đó trong một chương trình là một nhiệm vụ khó khăn. Vì vậy, chúng tôi sử dụng phương pháp lập trình mô-đun để đối phó với những tình huống như vậy
Lập trình mô-đun là một cách tiếp cận lập trình trong đó thay vì viết mã cho một vấn đề lớn, chúng tôi chia nó thành nhiều vấn đề nhỏ độc lập. Khi chúng tôi giải quyết từng vấn đề, chúng tôi sẽ hợp nhất chúng để đạt được mục tiêu chính của chúng tôi
Lợi thế của việc sử dụng Lập trình mô-đun
Ưu điểm của việc làm theo phương pháp này là chúng ta có thể tăng khả năng đọc mã. Chúng ta có thể tái sử dụng nó nhiều lần. Hơn nữa, chúng tôi dễ dàng bảo trì chúng và thay đổi chúng theo cách sử dụng của chúng tôi. Hơn nữa, nó giúp chúng tôi rất nhiều trong khi gỡ lỗi chương trình vì chúng tôi không phải mò mẫm nhiều trong một tệp.
Giới thiệu về Báo cáo nhập khẩu
Khi tất cả các vấn đề độc lập được giải quyết, câu hỏi đặt ra là làm thế nào chúng ta có thể liên kết chúng. Ở đây, câu lệnh Python Import xuất hiện.
Câu lệnh nhập giúp nhập mã từ các tệp khác hoặc mô-đun vào tệp chúng tôi đang làm việc. Bạn có thể coi nó như một cầu nối cho phép chúng ta truy cập vào các thuộc tính hoặc phương thức của lớp từ các tệp khác để chúng ta có thể sử dụng chúng. Tuy nhiên, có một cú pháp thích hợp để làm theo để làm điều đó mà chúng ta sẽ thấy trong vài giây nữa. Trước đó, trước tiên hãy hiểu cấu trúc thư mục đã cho.
from package_name.module_name import ClassName
5Vì vậy, trong cấu trúc thư mục đã cho, chúng ta có một thư mục ứng dụng chứa hai thư mục có tên module1 và module2. Trong mỗi thư mục, chúng tôi có các tệp có tên lần lượt là tệp1, tệp2 và tệp3. Bây giờ, chúng ta sẽ thảo luận về các kịch bản khác nhau của việc nhập các lớp hoặc tệp từng cái một. Nào,
Nhập các lớp từ một tệp khác
Trong ví dụ này, đầu tiên, chúng ta sẽ định nghĩa một lớp trong file1. py và sau đó nhập nó vào file2. py
from package_name.module_name import ClassName
6from package_name.module_name import ClassName
7from package_name.module_name import ClassName
8from package_name.module_name import ClassName
9calepin
├── pipeline.py
├── processors
├── __init__.py
├── processor_1.py
├── ...
└── processor_50.py
0Trong ví dụ trên, chúng tôi đã nhập tệp1 bằng cách sử dụng câu lệnh "nhập". Sau đó, chúng ta tạo một thể hiện của lớp mà chúng ta muốn sử dụng. e. ArithmeticOperations bằng cách tham khảo nó. Chúng ta có thể hiểu nó là;
- Chúng tôi đã nhập tệp có tên tệp1
- Sau đó, chúng tôi giới thiệu lớp đó bằng file1. ArithmeticOperations[] và gán nó cho biến obj
- Sau đó, chúng ta gọi hàm get_sum bằng cách sử dụng đối tượng ‘obj’
- Và, sau đó in kết quả được gán trong biến 'c'
We can also do it using “from import ” statement. Take a look to it;
calepin
├── pipeline.py
├── processors
├── __init__.py
├── processor_1.py
├── ...
└── processor_50.py
1calepin
├── pipeline.py
├── processors
├── __init__.py
├── processor_1.py
├── ...
└── processor_50.py
2xu hướng
Hướng dẫn cơ bản về Python __all__
Nhập tất cả các lớp từ tệp khác
In this section, we will discuss that can we import all the classes at once from another file. Sometimes, it is the scenario that it is needed to import all the classes from other files. In that case, we use “from import *” statement. We can read it as from file_name import all. It means that we imported all the available classes from the given file. Let’s look at its example.
from package_name.module_name import ClassName
6calepin
├── pipeline.py
├── processors
├── __init__.py
├── processor_1.py
├── ...
└── processor_50.py
4from package_name.module_name import ClassName
8from package_name.module_name import ClassName
61from package_name.module_name import ClassName
62Phổ biến bây giờ
Mọi thứ về Python SortedDict
Nhập các lớp từ một thư mục khác
Trong ví dụ này, chúng ta sẽ sử dụng lớp ArithmeticOperations trong file3. tôi. e nằm trong một thư mục khác i. mô-đun e1. Nhưng trước khi làm điều đó, chúng ta phải bao gồm __init__. py tệp trong mô-đun 1 cho trình thông dịch biết rằng mô-đun nằm trong cùng một gói.
Chúng ta cũng phải chỉ định đường dẫn của module1. Đối với điều đó, chúng tôi sẽ sử dụng mô-đun “sys”. Hãy nhìn vào mã
from package_name.module_name import ClassName
63from package_name.module_name import ClassName
64'hệ thống. đường dẫn. chèn[0,”. ”] ‘ Dòng mã này báo cho trình thông dịch biết rằng trước tiên hãy ra khỏi thư mục hiện tại đến thư mục mẹ và sau đó tìm mô-đun ở đó
Nhập các lớp từ các thư viện được xác định trước
Trong ví dụ trên, chúng tôi đã sử dụng "nhập sys" là thư viện được xác định trước và chúng tôi muốn nhập và sử dụng các chức năng của nó
hệ thống. đường dẫn. chèn[]; . Sử dụng các phụ thuộc và mô-đun như vậy giúp công việc của chúng ta dễ dàng hơn vì chúng ta không cần phải viết mã cho các chức năng đó một cách rõ ràng. Chúng tôi chỉ cần kiến thức về gói đã cho và cách sử dụng gói đó
xu hướng
[Đã sửa] ModuleNotFoundError. Không có mô-đun nào có tên Pycocotools
câu hỏi thường gặp
Lớp nhập Python từ một tệp khác không hoạt động
Trong trường hợp này, vấn đề nằm ở tham chiếu của lớp nguồn mà bạn muốn nhập. Câu trả lời cho câu hỏi này phụ thuộc vào các điều kiện khác nhau mà bạn muốn nhập tệp. Chúng tôi đã thảo luận tất cả những điều trên và bạn có thể tham khảo chúng tùy theo tình trạng của mình
Làm cách nào để sử dụng __import__ để nhập một lớp từ các tệp khác trong Python?
Chúng ta có thể sử dụng đoạn mã sau trong file2. py để nhập động lớp từ file1.
lớp Dynamic_import.
def __init__[self,module_name,class_name].
#__init__ phương thức được sử dụng để nhập mô-đun lấy tên mô-đun làm tham số
module = __import__[module_name]
# . get_sum[class_nm,3,8]
class_nm = getattr[module,class_name]
data= class_nm.get_sum[class_nm,3,8]
print[data]
obj = Dynamic_import[“file1″,”ArithmeticOperations”]
Làm cách nào để nhập lớp động?
Chúng ta có thể nhập động lớp học bằng hàm ma thuật __import__ hoặc mô-đun imp.
Xem ví dụ;
nhập imp
nhập sys
#dynamic import< .
def dynamic_imp[name, class_name]:
# lần hiển thị. find_module[] trả về đường dẫn và mô tả của mô-đun đã cho
from package_name.module_name import ClassName
65#imp. load_module[] trả về lớp hoặc gói
from package_name.module_name import ClassName
66from package_name.module_name import ClassName
67from package_name.module_name import ClassName
68if name = .
mod, modCl = dynamic_imp[“file1 “,”addNumbers”]
modCl. addNumbers[1, 2]
Làm cách nào để nhập một lớp từ sổ ghi chép Jupyter khác?
# Chạy lệnh sau
. pip cài đặt ipynb
# Bạn có thể nhập các sổ ghi chép khác bằng cách sử dụng
từ ipynb. fs. đầy.
Sự kết luận
Vì vậy, hôm nay chúng ta đã xem xét cách chúng ta có thể nhập các lớp từ các tệp hoặc thư mục khác. Chúng tôi cũng đã có được kiến thức về Lập trình mô-đun và Tuyên bố nhập khẩu. Chúng tôi đã xem, Lập trình mô-đun đã thay đổi cách tiếp cận lập trình và làm cho nó dễ dàng hơn