Python tải động lớp từ tệp

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ước

Có 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ách

Tự độ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 để đi

bộ 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
5

Vì 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
6

from package_name.module_name import ClassName
7

from package_name.module_name import ClassName
8

from package_name.module_name import ClassName
9

calepin
├── pipeline.py
├── processors
    ├── __init__.py
    ├── processor_1.py
    ├── ...
    └── processor_50.py
0

Trong 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
1

calepin
├── pipeline.py
├── processors
    ├── __init__.py
    ├── processor_1.py
    ├── ...
    └── processor_50.py
2

xu 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
6

calepin
├── pipeline.py
├── processors
    ├── __init__.py
    ├── processor_1.py
    ├── ...
    └── processor_50.py
4

from package_name.module_name import ClassName
8

from package_name.module_name import ClassName
61

from package_name.module_name import ClassName
62

Phổ 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
63

from 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
66
from package_name.module_name import ClassName
67
from package_name.module_name import ClassName
68

if 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

Chủ Đề