Sự khác biệt giữa các mô-đun và lớp trong Python là gì?

Khái niệm lớp, xuất hiện trong nhiều ngôn ngữ lập trình, là nền tảng cho lập trình hướng đối tượng và rất dễ hiểu. Lớp dùng để trừu tượng hóa các đặc điểm chung của các đối tượng khác nhau, phân loại các đối tượng giống nhau thành cùng một khái niệm theo nguyên tắc tương tự. Lớp đóng gói dữ liệu và hoạt động để sử dụng lại trong tương lai

Dưới đây là một ví dụ lớp python

class TestClass(Object):

    def func_1(self):
        ......

    def func_2(self):
        ......

2. mô-đun

Trong Python một. tệp py được coi là một mô-đun. Sau khi tệp tập lệnh được tạo, các hàm và biến nhất định được xác định. Bạn có thể sử dụng lại các hàm và biến này bằng cách nhập mô-đun vào các tệp khác yêu cầu các hàm hoặc biến này. Tên mô-đun là tên tệp trừ đi. hậu tố py

Các mô-đun cũng có thể được chia thành các mô-đun tích hợp sẵn và các mô-đun tùy chỉnh. Các mô-đun tích hợp được tích hợp vào Python, chẳng hạn như sys, os và các mô-đun cơ bản khác. Hàm tích hợp dir( module_name ) cho phép bạn xem dữ liệu nào mô-đun xác định (bao gồm tên biến, tên mô-đun, tên hàm, v.v. ). Hàm dir() sẽ trả về tất cả các tên hiện được xác định khi không có đối số

~$ python3
Python 3.7.1 (default, Dec 14 2018, 19:28:38) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

>>> dir('django')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

2. 1 Đường dẫn tìm kiếm mô-đun

Khi nhập một mô-đun, trình thông dịch sẽ tìm mô-đun trong gói hiện tại. Nếu không tìm thấy, nó sẽ tìm thấy nó trong mô-đun tích hợp. Nếu không tìm thấy cũng được thì tìm file module tương ứng (module_name. py) theo đường dẫn trong giá trị sys.path

3. Bưu kiện

Một gói là một cấu trúc thư mục tệp phân cấp. Nó định nghĩa một môi trường thực thi ứng dụng python bao gồm n mô-đun hoặc n gói con. Một gói là một thư mục chứa __init__. py, phải chứa __init__. py và các mô-đun hoặc gói con khác

Gói có thể nhập các gói khác bằng lệnh import hoặc nhập một số mô-đun trong gói khác bằng lệnh from + import

import django.http

from django.conf.urls import url

Tệp đầu tiên trong thư mục gói phải là __init__. py. Nếu cũng có __init__. py trong thư mục con thì nó là gói con của gói hiện tại

Một lớp có thể được khai báo trong shell tương tác hoặc mô-đun. Nếu một lớp được khai báo trong mô-đun, nó được coi là một thuộc tính của mô-đun. Điều này có nghĩa là tên lớp có thể được truy cập bằng mẫu sau

moduleName.ClassName

nơi đây

  • moduleName – tên của mô-đun có lớp mà bạn muốn đưa vào mô-đun hiện tại;
  • ClassName – имя класса в модуле moduleName .

Để phương thức này hoạt động, trước tiên bạn cần thực hiện lệnh nhập

import moduleName

Cách gọi lớp này cũng được dùng trong trường hợp kế thừa lớp này

Ví dụ. Hình 1 cho thấy cuộc gọi đến phương thức Show() của Xin chào . Module1 from the code of Module2.

Sự khác biệt giữa các mô-đun và lớp trong Python là gì?

Hình 1. Tham chiếu đến lớp Xin chào từ một mô-đun khác

Sau khi chạy “Module2. py” , kết quả sau đây sẽ được hiển thị

Module1.Hello.Show

 

2. Tham chiếu đến một lớp từ một mô-đun khác. Phương pháp 2

Với phương pháp này, lớp của mô-đun khác có thể được truy cập mà không cần sử dụng tên mô-đun ở phía trước tên lớp (xem phương pháp trước). Trong trường hợp này, bạn cần sử dụng kết hợp các lệnh from và import theo mẫu sau

from moduleName import ClassName

nơi đây

  • moduleName là tên của mô-đun mà lớp ClassName được khai báo;
  • ClassName là tên của lớp được khai báo trong mô-đun moduleName .

Sau kết nối này, bạn có thể tham khảo Tên Lớp mà không cần chỉ định tên mô-đun ở phía trước.

Ví dụ. Hình 2 cho thấy một ví dụ về cách truy cập lớp Triangle mà không sử dụng tên Module1.

Sự khác biệt giữa các mô-đun và lớp trong Python là gì?

Hình 2. Một cách để truy cập tên lớp bằng cách sử dụng kết hợp các chỉ thị từ nhập directives

 

3. Trường hợp class và module trùng tên

Đôi khi một mô-đun và một lớp trong đó có cùng tên. Sau đó, để truy cập tên lớp bằng phương pháp 1 (xem p. 1), bạn phải thêm tiền tố vào tên mô-đun

Nếu bạn không chỉ định tên mô-đun, một ngoại lệ sẽ được đưa ra. Một tên duy nhất được trình thông dịch hiểu là tên mô-đun, không phải tên lớp. Ví dụ sau giải thích điểm này

Ví dụ. Hình tròn. mô-đun py được xác định, thực hiện lớp Circle class

# Module circle.py
# The class that defines the circle

import math

class Circle:
    # Initial initialization method
    def __init__(sl, x, y, r):
        sl.x = x
        sl.y = y
        sl.r = r

    # Returns the area of a circle
    def Area(sl):
        return math.pi*sl.r*sl.r

Sau đó, để sử dụng lớp Circle trong một mô-đun khác, bạn cần chỉ định tên mô-đun khi đề cập đến tên của nó.

________số 8_______

Kết quả của chương trình

area = 78.53981633974483

Nếu trong dòng

obj = circle.Circle (2, 3, 5)

xóa tên của vòng kết nối mô-đun

obj = Circle (2, 3, 5)

sau đó một ngoại lệ sẽ được ném

 

4. Trường hợp các mô-đun có các lớp trùng tên

Nếu một lớp được khai báo trong một mô-đun bao gồm có tên trùng với tên của lớp của mô-đun hiện tại, thì quy tắc sau sẽ được áp dụng

  • để truy cập vào lớp của mô-đun khác, đảm bảo đặt tên của mô-đun khác trước tên lớp. Trong trường hợp này, phương pháp sử dụng lệnh từ nhập không hoạt động. Chỉ có cách sử dụng lệnh nhập mới hiệu quả.

Ví dụ. Trong ví dụ này, các lớp có cùng tên được khai báo trong các mô-đun khác nhau. Đối với trường hợp như vậy, cách chính xác để sử dụng lớp của mô-đun khác được trình bày

Văn bản của module1. mô-đun py .

# A module named module1.py
# The module declares a class named A

class A:
    # Some class method
    def A(self):
        print("Module1: A.A()")

Văn bản của module2. mô-đun py . Mô-đun này trình bày cách truy cập lớp A của mô-đun1. p .

import moduleName
0

Nếu thay vì dòng

import moduleName
1

bạn gõ

import moduleName
2

sau đó trong dòng

import moduleName
3

sẽ báo lỗi

import moduleName
4

Sau khi khởi động chương trình sẽ cho kết quả như sau

import moduleName
5

 

5. Các quy ước chung để đặt tên cho các mô-đun và lớp

Khi viết các dự án lớn có chứa một số lượng lớn các mô-đun và lớp, việc xác định chính xác là rất quan trọng. Do đó, Python có một quy ước nhất quán cho tên lớp và mô-đun

Sự khác biệt giữa mô-đun và lớp là gì?

Sự khác biệt giữa lớp và mô-đun là gì? . Modules are collections of methods and constants. Chúng không thể tạo phiên bản. Các lớp có thể tạo ra các thể hiện (đối tượng) và có trạng thái cho mỗi thể hiện (các biến thể hiện) .

Các mô-đun python có thể có các lớp không?

Mô-đun Python về cơ bản là một tệp tập lệnh python có thể chứa các biến, hàm và lớp .