__ init __ Trong thư mục Python là gì?

Gói Python chỉ đơn giản là một tập hợp các mô-đun python có tổ chức. Mô-đun python chỉ đơn giản là một tệp python

Tại sao tôi muốn tạo một gói bằng cách sử dụng __init__.py?

Tạo một gói với __init__.py là để giúp phát triển các dự án Python lớn hơn dễ dàng hơn

Nó cung cấp một cơ chế để bạn nhóm các tập lệnh python riêng biệt thành một mô-đun có thể nhập được

Hãy chạy qua một số ví dụ

Cách tốt nhất để hiểu tại sao bạn sẽ sử dụng __init__.pyvà để tìm hiểu cách sử dụng nó để tạo một gói là chạy qua một số ví dụ nhanh. Cách tốt nhất để học là làm

Mã trong hướng dẫn này sẽ hoạt động với Python 2 hoặc 3. Chỉ cần nhớ, nếu bạn đang sử dụng 2 thì bạn sẽ cần sử dụng chức năng

# stringLength.py

def stringLength(inStr):
    return len(inStr)
2

Giả sử chúng tôi có ba mô-đun chúng tôi đã tạo

someFolder
|-- stringLength.py
|-- stringToUpper.py
`-- stringToLower.py

Hãy nhớ rằng một mô-đun chỉ là một tên khác cho bất kỳ tệp python nào

Ví dụ của chúng tôi, nội dung của các tệp này là như sau

# stringLength.py

def stringLength(inStr):
    return len(inStr)

# stringToUpper.py

def stringToUpper(inStr):
    return inStr.upper()

# stringToLower.py

def stringToLower(inStr):
    return inStr.lower()

Rõ ràng, các chức năng này là vô dụng, nhưng nó giúp phục vụ như một mô hình cho khái niệm cơ bản rằng chúng ta có một số mô-đun python mà chúng ta đã viết có liên quan đến nhau.

Vì vậy, nếu không tạo gói và sử dụng __init__.py, làm cách nào để sử dụng các chức năng trong các tệp này?

Chà, chúng tôi chỉ có thể nhập các tệp này nếu chúng nằm trong thư mục hiện tại mà bất kỳ tập lệnh nào chúng tôi đang chạy đều chạy từ đó

Chà, chúng ta có thể sử dụng các tệp này trong tập lệnh Python mới nhưng với một cảnh báo chính

  • Các tệp phải nằm trong cùng thư mục với tập lệnh mà chúng tôi đang cố gắng sử dụng chúng trong

Để minh họa điều đó, hãy tạo một tệp có tên

# stringLength.py

def stringLength(inStr):
    return len(inStr)
4 tận dụng các mô-đun của chúng tôi

# example1.py

import stringLength
import stringToLower
import stringToUpper

some_string = "Hello, Universe!"

print(stringLength.stringLength(some_string))
print(stringToLower.stringToLower(some_string))
print(stringToUpper.stringToUpper(some_string))

Thêm một khoảng trống __init__.py

Điều gì sẽ xảy ra nếu chúng ta muốn tách các tập lệnh này thành một thư mục để sắp xếp chúng ngăn nắp hơn?

Chà, đó là lúc tệp __init__.py phát huy tác dụng

Trước tiên, hãy di chuyển các tập lệnh của chúng ta vào một thư mục con mới và gọi nó là.

# stringLength.py

def stringLength(inStr):
    return len(inStr)
7. Sau đó, tạo một tệp trống trong thư mục đó có tên là __init__.py

Đây là cấu trúc tệp/thư mục mới của chúng tôi

________số 8_______

Vì vậy, bây giờ hãy kiểm tra chính xác những gì __init__.py cho phép chúng tôi làm

Hãy tạo một tệp

# stringToUpper.py

def stringToUpper(inStr):
    return inStr.upper()
0 mới

# example2.py

import string_func.stringLength
import string_func.stringToLower
import string_func.stringToUpper

some_string = "Hello, Universe!"

print(string_func.stringLength.stringLength(some_string))
print(string_func.stringToLower.stringToLower(some_string))
print(string_func.stringToUpper.stringToUpper(some_string))

Vì vậy, bây giờ chúng ta có thể truy cập các hàm chuỗi của mình theo cách này. Điều này thật tuyệt, vì tất cả chúng đều nằm trong một thư mục riêng biệt, nhưng cú pháp chắc chắn không ngắn gọn lắm. Hãy xem liệu chúng ta có thể dọn dẹp mọi thứ một chút bằng cách chỉnh sửa tệp __init__.py của mình không

Thêm nhập vào init. py

Mở tệp __init__.py của bạn và thực hiện các thay đổi sau

# __init__.py
from .stringLength import stringLength
from .stringToLower import stringToLower
from .stringToUpper import stringToUpper

Lưu ý rằng

# stringToUpper.py

def stringToUpper(inStr):
    return inStr.upper()
3 trước tên mô-đun là không cần thiết kể từ Python 3 vì nó nghiêm ngặt hơn đối với việc nhập tương đối. https. // stackoverflow. com/questions/12172791/changes-in-import-statement-python3?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

Và vì vậy với điều đó trong __init__.py của chúng tôi, giờ đây chúng tôi có thể rút ngắn mã của mình thành

# example3.py

import string_func

some_string = "Hello, Universe!"

print(string_func.stringLength(some_string))
print(string_func.stringToLower(some_string))
print(string_func.stringToUpper(some_string))

Bây giờ cú pháp ngắn hơn rất nhiều và bạn có thể thấy rằng

# stringLength.py

def stringLength(inStr):
    return len(inStr)
7 đang hoạt động giống như mô-đun của chính nó

Vì vậy, về cơ bản đó là những gì __init__.py làm. Nó cho phép bạn xử lý một thư mục như thể nó là một mô-đun python. Sau đó, bạn có thể xác định thêm nội dung nhập bên trong tệp __init__.py của mình để thực hiện quá trình nhập ngắn gọn hơn hoặc bạn chỉ cần để trống tệp

Gỡ lỗi # stringToUpper.py def stringToUpper(inStr): return inStr.upper() 8 Vấn đề

Về cơ bản, có 3 mẹo tôi có để gỡ lỗi các sự cố nhập

  1. Sử dụng trình thông dịch tương tác (REPL) để nhập các mô-đun và xem bạn có nhận được những gì bạn mong đợi không

  2. Bắt đầu tập lệnh của bạn với

    # stringToUpper.py
    
    def stringToUpper(inStr):
        return inStr.upper()
    
    9 và sau đó kiểm tra đầu ra để xem chính xác nơi các mô-đun của bạn được nhập từ đâu

  3. Sử dụng Pycharm. Khả năng xem xét nội tâm tuyệt vời của Pycharm có nghĩa là bạn sẽ biết ngay liệu mô-đun của mình có được nhập đúng cách hay không vì nó sẽ báo lỗi nếu không. Đôi khi nó cũng sẽ đề xuất sự điều chỉnh thích hợp. Phiên bản cộng đồng là miễn phí và nếu bạn là sinh viên, bạn có thể đăng ký miễn phí TẤT CẢ các sản phẩm của họ

Để biết thêm thông tin về các gói và mô-đun python, bạn có thể xem kiểm tra tài liệu về python trên đó

Bạn cũng có thể xem podcast Talk Python To Me tuyệt vời này với David Beazley, nơi anh ấy thảo luận về chủ đề này, cũng như bài nói chuyện của David về cùng chủ đề

Mục đích của __ init là gì?

Phương thức __init__ cho phép lớp khởi tạo các thuộc tính của đối tượng và không phục vụ mục đích nào khác . Nó chỉ được sử dụng trong các lớp học.

Mục đích của __ init __ py trong thư mục dự án * là gì?

__init__. py cho phép trình thông dịch Python biết rằng thư mục chứa mã cho mô-đun Python . Một __init__. tệp py có thể để trống. Nếu không có, bạn không thể nhập các mô-đun từ thư mục khác vào dự án của mình.

__ init __ có chạy tự động không?

Ghi chú. Hàm __init__() được gọi tự động mỗi khi lớp được sử dụng để tạo đối tượng mới .

Sự khác biệt giữa __ init __ và __ chính __ là gì?

__trong đó__. py , trong số những thứ khác, gắn nhãn một thư mục là thư mục python và cho phép bạn đặt các biến ở cấp độ rộng của gói. __chủ yếu__. py , trong số những thứ khác, được chạy nếu bạn cố chạy một nhóm tệp python đã nén. __chủ yếu__. py cho phép bạn thực thi các gói