Lập trình hướng đối tượng trong phát triển Python

Tram Ho

Python là một ngôn ngữ lập trình mạnh mẽ được sử dụng để phát triển ứng dụng web. Nó cũng là một ngôn ngữ lập trình phổ biến rộng rãi được sử dụng cho các ứng dụng học máy và trí tuệ nhân tạo.

Với Python, việc giải quyết vấn đề lập trình phức tạp trở nên đơn giản hơn. Có một số cách tiếp cận để giải quyết vấn đề trong Python. OOP là một trong những cách tiếp cận đó.

Trong bài viết này, tôi sẽ giới thiệu cho bạn một số nguyên tắc OOP cơ bản trong phát triển Python .

Lập trình hướng đối tượng (OOP) là gì?

Lập trình hướng đối tượng (OOP) là một cách tiếp cận giải quyết vấn đề trong lập trình Python , bao gồm cấu trúc các chương trình theo cách các thuộc tính và hành vi được nhóm lại với nhau trong một đối tượng.

Ví dụ: một người là một đối tượng có các thuộc tính như tuổi tác, giới tính, địa chỉ cùng với các hành vi như đi bộ, nói chuyện, ngủ, v.v. Theo thuật ngữ kỹ thuật hơn, email là một đối tượng có các thuộc tính như người nhận, chủ đề, v.v. các hành vi như đính kèm, lưu vào bản nháp, gửi, v.v.

OOP trong lập trình Python dựa trên việc phát triển mã có thể tái sử dụng. Nó tránh được vấn đề viết lại mã và tuân theo nguyên tắc Đừng lặp lại chính mình (DRY).

Mô hình OOP cho phép các lập trình viên Python lập mô hình các thực thể trong thế giới thực và mối quan hệ giữa họ như nhân viên và lương, sinh viên và nhãn hiệu của họ, v.v. Những thực thể này được chuyển đổi thành đối tượng phần mềm và có thể thực hiện các hoạt động cụ thể dựa trên dữ liệu.

Mô hình OOP trong Python

OOP, như bạn biết bây giờ, là một cách tiếp cận để giải quyết vấn đề bằng cách tạo các đối tượng và phân loại chúng dựa trên các thuộc tính và hành vi. Để bắt đầu với OOP, đây là một số nguyên tắc OOP có thể giúp bạn bắt đầu.

Lớp vs Mô-đun:

  • Mô-đun : Một mô-đun python không có gì ngoài một gói để đóng gói mã có thể tái sử dụng. Các mô-đun thường, nhưng không phải luôn luôn, nằm trong một thư mục có tệp init .py bên trong nó. Các mô-đun có thể chứa các chức năng nhưng cũng có các lớp. Các mô-đun được nhập bằng cách sử dụng từ khóa nhập khẩu.
  • Ví dụ: Chúng tôi sử dụng views.py , models.py vv trong khuôn khổ django web. Tất cả các tệp này về cơ bản là các mô-đun sẽ có số lượng lớp hoặc hàm trong đó. Tất cả các mô-đun này có thể được sử dụng lại trong bất kỳ dự án hoặc cùng một dự án chỉ bằng cách nhập chúng.
  • Các lớp : Mặt khác, các lớp có thể được xác định trong mã ứng dụng chính của bạn hoặc bên trong các mô-đun được nhập bởi ứng dụng của bạn. Các lớp là mã của lập trình hướng đối tượng và có thể chứa các thuộc tính và phương thức.
  • Ví dụ : Chúng tôi sử dụng một số lớp trong tệp xem hoặc tệp mô hình hoặc tệp biểu mẫu trong phát triển django bằng Python. Tất cả các lớp này về cơ bản được kết hợp trong các mô-đun.

Do đó, chúng ta có thể xây dựng thêm cả khi chúng ta có thể có các lớp khác nhau trong các mô-đun hoặc có thể nói rằng các mô-đun không là gì ngoài các bộ sưu tập của các lớp và hàm khác nhau trong khi các lớp là mã của OOP và có thể chứa các đạo cụ khác nhau. và phương pháp.

Sơ thẩm:

  • Một đối tượng riêng lẻ của một lớp nhất định. Một đối tượng ‘obj’ thuộc về Vòng tròn lớp, là một thể hiện của Vòng tròn lớp.
  • Đoạn mã sau cho thấy cách tạo một thể hiện.

Đầu ra:

Phương pháp:

  • Một phương thức Python giống như một hàm Python, nhưng nó phải được gọi trên một đối tượng. Và để tạo ra nó, bạn phải đặt nó trong một lớp.
  • Ví dụ : chúng tôi sử dụng phương thức get bên trong lớp hoặc phương thức post. Chúng tôi cũng sử dụng phương thức init .
  • Các phương thức là khác nhau sau đó các chức năng vì chúng phải được gọi trên một đối tượng.
  • Có ba loại phương pháp có sẵn trong python. Đó là: 1. Phương thức sơ thẩm 2. Phương thức lớp 3. Phương thức tĩnh
  • Phương pháp sơ thẩm : Loại phương thức phổ biến nhất. Có thể truy cập dữ liệu và thuộc tính duy nhất cho mỗi trường hợp.
  • Bắt buộc phải có ” cái tôi ” làm tham số, nhưng chúng ta không phải vượt qua nó mọi lúc.
  • Bằng cách sử dụng tự, chúng ta có thể truy cập bất kỳ dữ liệu hoặc phương thức nào có thể nằm trong một lớp.
  • Bất kỳ phương thức nào bạn tạo sẽ tự động được tạo như một phương thức thể hiện, trừ khi bạn nói với Python bằng cách khác. Ngoài ra, không cần trang trí để chạy phương thức.
  • Ví dụ:

  • Như chúng ta có thể thấy ở đây trong ví dụ, chúng ta đã tạo ra hai phương thức.
  • Để truy cập vào bất kỳ phương thức nào, trước tiên chúng ta phải tạo một cá thể mà chúng ta đã tạo bởi dòng de de DecoratorExample () .
  • Sau khi tạo một thể hiện, chúng tôi đã truy cập phương thức trên dòng tiếp theo.
  • Chúng tôi cũng có thể gọi cả lớp bằng cách sử dụng ‘ de . lớp ‘.
  • Phương thức lớp: Có thể truy cập các phương thức giới hạn trong lớp. Có thể sửa đổi chi tiết cụ thể của lớp.
  • Phương thức lớp được tạo bằng cách sử dụng trang trí ‘ groupmethod ‘.
  • Vì một phương thức cá thể sử dụng ‘ tự ‘ làm đối số, nên bắt buộc phải truyền ‘ cls ‘ làm đối số.
  • Họ không thể truy cập dữ liệu cụ thể, nhưng họ có thể gọi các phương thức tĩnh khác.
  • Ví dụ:

  • Trong ví dụ trên, chúng ta có thể thấy rằng chúng ta đã tạo một phương thức lớp và lớp truy cập với sự trợ giúp của ‘ cls.some_other_feft () ‘.
  • Chúng ta có thể sử dụng các phương thức lớp để tạo một thể hiện của lớp trong phát triển Python bằng OOP.
  • Ví dụ : chúng ta có thể tạo một thể hiện của một lớp bằng cách đưa ra các giá trị thu được bằng các phép tính nhất định.
  • Dưới đây là một ví dụ nhỏ về datetime sử dụng classmethod:

  • Phương thức tĩnh : Không thể truy cập bất cứ thứ gì khác trong lớp. Mã hoàn toàn khép kín.
  • Nó được tạo ra bằng cách chỉ sử dụng ‘ staticmethod ‘ và không cần phải tạo ra các trường hợp hoặc sử dụng lập luận tự hoặc cls.
  • Chúng phải hoàn toàn khép kín và chỉ hoạt động với dữ liệu được truyền vào dưới dạng đối số.
  • Bạn có thể sử dụng một phương thức tĩnh để thêm hai số hoặc truyền một chuỗi.

  • Các phương thức tĩnh không thể sửa đổi trạng thái đối tượng cũng như trạng thái lớp. Các phương thức tĩnh bị hạn chế trong những dữ liệu nào họ có thể truy cập.

Biến:

  • Trong lập trình python, chúng ta có ba loại biến, đó là: 1. Biến lớp 2. Biến Instance 3. Biến toàn cục
  • Biến lớp: Nếu một biến được gán bên trong phạm vi của một lớp, thì biến đó được gọi là biến lớp.
  • Nó không thể được truy cập bên ngoài phạm vi lớp.
  • Trong ví dụ dưới đây, chúng tôi đã tạo các biến khác nhau trong một lớp.
  • Tất cả các biến này được truy cập sau khi tạo một thể hiện lớp hoặc lớp truy cập trước khi truy cập thể hiện.
  • Ví dụ : Ở đây trong ví dụ, chúng tôi đã tạo một lớp và cũng tạo một biến bên trong lớp.
  • Chúng ta có thể tìm nạp biến đó bằng cách tạo một thể hiện của lớp.
  • Không tạo ra nó, chúng ta không thể tìm nạp bất kỳ biến nào. Chúng tôi sẽ nhận được “biến” không xác định lỗi.

Biến sơ thẩm: Biến này được tạo trong lớp trong phương thức thể hiện. Các biến có thể được truy cập như dưới đây.

Biến toàn cục: Nó có thể được truy cập ở bất cứ đâu trong dự án vì nó được gán trên toàn cầu. Chúng ta có thể truy cập bên trong lớp, bên trong bất kỳ phương thức nào của lớp hoặc bên trong bất kỳ chức năng nào khác ở bất kỳ đâu trong tệp.

Quá tải / ghi đè:

  • Quá tải phương thức: Khi một hàm duy nhất hoạt động khác nhau bất cứ khi nào có bất kỳ đối số nào được thông qua.
  • Về cơ bản, trong ví dụ của chúng ta, chúng ta sẽ chuyển arg đầu tiên dưới dạng kiểu dữ liệu, sẽ cung cấp cho chúng ta kiểu dữ liệu. Sau đó, chúng tôi sẽ làm việc theo nó trong chức năng. Toàn bộ chức năng này được gọi là phương pháp quá tải.

Như đã trình bày ở trên trong ví dụ, nếu chúng ta truyền một chuỗi dưới dạng kiểu dữ liệu thì câu trả lời cho điều đó sẽ khác nếu chúng ta truyền một số nguyên. Phương pháp này được gọi là quá tải phương thức.

Ghi đè phương thức : Khi một lớp cha được kế thừa trong lớp con và lớp con có cùng tên hàm, thì hàm cha của lớp cha bị ghi đè. Ví dụ dưới đây cho thấy cách một lớp cha được thừa kế bởi một đứa trẻ có cùng một phương thức init hoạt động khác nhau trong cả hai lớp.

Đa hình:

  • Đa hình là một tính năng quan trọng của định nghĩa lớp trong phát triển web Python được sử dụng khi bạn có các phương thức thường được đặt tên trên các lớp hoặc các lớp con. Điều này cho phép các hàm sử dụng các đối tượng của bất kỳ lớp đa hình nào mà không cần phải biết về sự khác biệt giữa các lớp.
  • Về cơ bản, chúng ta có thể sử dụng các tính năng của lớp trong các lớp khác, tránh tính năng tương tự của các lớp khác.
  • Điều này được biết đến với tên gọi là đa hình thái .
  • Ví dụ : giả sử chúng ta có hai con cá – cá mập và cá voi. Cả hai sẽ có các tính năng phổ biến như bơi nhưng chúng trả lại đầu ra khác nhau.
  • Vì vậy, chúng ta cần gọi một lớp cụ thể bất cứ khi nào cần.
  • Để có được điều này, tính đa hình đi vào hình ảnh. Ví dụ dưới đây cho thấy làm thế nào nó được thu được.

  • Trong đoạn mã trên, chúng ta có thể thấy rằng khi một thể hiện của lớp cá mập được tạo ra, nó sẽ trả về một tính năng của lớp cá mập chứ không phải của lớp cá voi và ngược lại.
  • Dưới đây là một ví dụ khác về đa hình.

  • Trong ví dụ trên, chúng ta đã tạo một hàm khác sẽ lấy bất kỳ đối số nào và trả về hàm. Do đó, do đa hình, nó sẽ trả về các phương thức khác nhau.

Di sản:

  • Kế thừa được thể hiện trong ví dụ trên của người và học sinh trong việc ghi đè.
  • Kế thừa là sử dụng các tính năng của cha mẹ ở trẻ.
  • Ở trên, chúng tôi đã sử dụng phương thức init của cha mẹ ở trẻ. Chúng ta cũng có thể sử dụng nhiều phương pháp khác được sử dụng trong phần cha mẹ.

Trừu tượng:

  • Trừu tượng có nghĩa là che giấu sự phức tạp và chỉ hiển thị các tính năng thiết yếu của đối tượng. Vì vậy, theo một cách nào đó, Trừu tượng có nghĩa là che giấu việc thực hiện thực sự và chúng tôi, với tư cách là người dùng, chỉ biết cách sử dụng nó.
  • Nói một cách đơn giản, chúng ta có thể nói rằng chúng ta phải tạo ra một tính năng cần được kế thừa bởi một lớp con.
  • Trong phát triển python theo mặc định, nó không thể cung cấp các lớp trừu tượng. Tuy nhiên, python để phát triển web đi kèm với một mô-đun cung cấp cơ sở để xác định các lớp Tóm tắt Cơ sở ( ABC ) và tên mô-đun đó là ABC. ABC hoạt động bằng cách đánh dấu các phương thức của lớp cơ sở là trừu tượng và sau đó đăng ký các lớp cụ thể như là các triển khai của cơ sở trừu tượng. Một phương thức trở thành một bản tóm tắt bằng cách trang trí nó với một từ khóa ababmetmethod .
  • Sự trừu tượng hóa được thực hiện bằng cách sử dụng trang trí nội bộ của Wap ababmetmethod trên chức năng.
  • Ví dụ : Trong ví dụ của chúng tôi, chúng tôi đã thực hiện chức năng bơi của lớp cha như một phương thức trừu tượng. Vì vậy, phương pháp này phải được kế thừa trong mỗi lớp con.
  • Nếu không ngụ ý, thì nó sẽ đưa ra một lỗi và nếu chúng ta cố gắng tạo một đối tượng của lớp cha, nó sẽ đưa ra một lỗi.

  • Ví dụ trên cho thấy rằng chúng ta không thể tạo phương thức mà không sử dụng trang trí. và chúng ta không thể tạo đối tượng của lớp cha.
  • Ngoài ra, chúng tôi đã tạo hai lớp con – một lớp có một phương thức trừu tượng và một lớp không có, và chúng tôi nhận được các kết quả đầu ra dưới đây.
  • Như được hiển thị ở trên, lớp cá voi đã không nhập phương thức – nó đưa ra một lỗi.

Phụ thuộc tiêm:

  • Python là một ngôn ngữ diễn giải rất linh hoạt với kiểu gõ động. Có một ý nghĩa là tiêm phụ thuộc cũng không hoạt động đối với nó, cũng như đối với Java. Ngoài ra, có một ý nghĩa là khung tiêm phụ thuộc là thứ mà các nhà phát triển Python không cần, vì việc tiêm phụ thuộc có thể được thực hiện dễ dàng bằng cách sử dụng các nguyên tắc cơ bản ngôn ngữ.
  • Phụ thuộc tiêm được thực hiện bởi chúng tôi trong nhiều cách khác nhau nhưng chúng tôi thường không nhận thức được nó.
  • Việc tiêm phụ thuộc không là gì ngoài việc tạo ra sự phụ thuộc cho một lớp mà không kế thừa lớp đó hoặc tạo bất kỳ thể hiện nào của lớp đó.
  • Có ba thuật ngữ trong tiêm phụ thuộc:
  • Khách hàng : thuật ngữ này được sử dụng cho lớp có sự phụ thuộc vào lớp khác. Trong ví dụ của chúng tôi, khách hàng là xe hơi.
  • Dịch vụ : thuật ngữ này được sử dụng cho lớp học phụ thuộc vào. Trong ví dụ của chúng tôi, dịch vụ là lớp động cơ.
  • Phụ thuộc vào đầu phun : thuật ngữ này được sử dụng cho mã bên ngoài chịu trách nhiệm tạo các đối tượng và tiêm phụ thuộc.
  • Ví dụ: Chúng tôi có một lớp gọi là môn học có tên của giáo viên trong đó. Bây giờ, nếu chúng ta muốn chuyển tên của môn học và giáo viên này trong một lớp khác, chúng ta có thể trực tiếp sử dụng thể hiện hoặc tạo đối tượng của nó nhưng điều này sẽ làm cho mã của chúng ta được mã hóa cứng.
  • Vì vậy, chúng tôi sẽ tạo một đối tượng của lớp mà chúng tôi muốn cho sự phụ thuộc.
  • Bây giờ đối tượng này sẽ được chuyển qua làm đối số trong lớp máy khách.
  • Vì vậy, điều này sẽ cung cấp cho chúng ta những gì chúng ta cần mà không có bất kỳ sự kế thừa nào trong cả lớp hoặc tạo bất kỳ trường hợp nào.
  • Chúng ta cũng có thể sử dụng ba loại kim phun phụ thuộc: 1. Kim phun xây dựng 2. Kim phun tài sản 3. Kim phun phương pháp
  • Giải thích chi tiết hơn được đưa ra trong liên kết dưới đây: https://pypi.org/project/dependency-injection/ http://python-dependency-injection.ets-labs.org/int sinhtion / di_in_python.html # usiously- links

Phần kết luận

Nếu bạn đang bắt đầu với OOP trong lập trình Python , bạn chắc chắn nên biết các lớp là gì và làm thế nào và khi nào bạn nên thực hiện chúng. Bạn nên học cách tạo các lớp cha mẹ và con để đảm bảo rằng bạn đang cấu trúc các chương trình của mình theo cách tốt hơn.

Một trong những điều quan trọng khi học OOP là nó không chỉ có giá trị trong phát triển Python mà còn giúp bạn trong Java, C, C ++ và các ngôn ngữ khác tuân theo các nguyên tắc OOP.

Cũng đọc

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo