Lập trình hướng đối tượng Python

Trong hướng dẫn này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó với sự trợ giúp của các ví dụ.

Video: Lập trình hướng đối tượng trong Python

Lập trình hướng đối tượng

Python là một ngôn ngữ lập trình đa mô hình. Nó hỗ trợ các cách tiếp cận lập trình khác nhau.

Một trong những cách tiếp cận phổ biến để giải quyết vấn đề lập trình là tạo các đối tượng. Đây được gọi là Lập trình hướng đối tượng (OOP).

Một đối tượng có hai đặc điểm:

  • thuộc tính
  • hành vi

Hãy lấy một ví dụ:

Một con vẹt có thể là một vật thể, vì nó có các đặc tính sau:

  • tên, tuổi, màu sắc dưới dạng thuộc tính
  • ca hát, nhảy múa như hành vi

Khái niệm OOP trong Python tập trung vào việc tạo mã có thể sử dụng lại. Khái niệm này còn được gọi là KHÔ (Đừng lặp lại chính mình).

Trong Python, khái niệm OOP tuân theo một số nguyên tắc cơ bản:

Lớp học

Một lớp là một bản thiết kế cho đối tượng.

Chúng ta có thể nghĩ về lớp học như một bản phác thảo của một con vẹt với các nhãn. Nó chứa tất cả các chi tiết về tên, màu sắc, kích thước, vv Dựa trên những mô tả này, chúng ta có thể nghiên cứu về con vẹt. Ở đây, một con vẹt là một đồ vật.

Ví dụ cho lớp vẹt có thể là:

 lớp Vẹt: vượt qua

Ở đây, chúng tôi sử dụng classtừ khóa để định nghĩa một Parrot lớp trống. Từ lớp, chúng tôi xây dựng các thể hiện. Một cá thể là một đối tượng cụ thể được tạo ra từ một lớp cụ thể.

Vật

Một đối tượng (thể hiện) là một khởi tạo của một lớp. Khi lớp được định nghĩa, chỉ có mô tả cho đối tượng được định nghĩa. Do đó, không có bộ nhớ hoặc bộ nhớ nào được cấp phát.

Ví dụ cho đối tượng của lớp parrot có thể là:

 obj = Con vẹt ()

Ở đây, obj là một đối tượng của lớp Parrot.

Giả sử chúng ta có chi tiết về những con vẹt. Bây giờ, chúng ta sẽ giới thiệu cách xây dựng lớp và các đối tượng của vẹt.

Ví dụ 1: Tạo lớp và đối tượng trong Python

 class Parrot: # class attribute species = "bird" # instance attribute def __init__(self, name, age): self.name = name self.age = age # instantiate the Parrot class blu = Parrot("Blu", 10) woo = Parrot("Woo", 15) # access the class attributes print("Blu is a ()".format(blu.__class__.species)) print("Woo is also a ()".format(woo.__class__.species)) # access the instance attributes print("() is () years old".format( blu.name, blu.age)) print("() is () years old".format( woo.name, woo.age))

Đầu ra

 Blu là một con chim Woo cũng là một con chim Blu 10 tuổi Woo 15 tuổi

Trong chương trình trên, chúng ta đã tạo một lớp với tên Parrot. Sau đó, chúng tôi xác định các thuộc tính. Các thuộc tính là một đặc tính của một đối tượng.

Các thuộc tính này được định nghĩa bên trong __init__phương thức của lớp. Đây là phương thức khởi tạo được chạy đầu tiên ngay sau khi đối tượng được tạo.

Sau đó, chúng tôi tạo các thể hiện của lớp Parrot. Ở đây, blu và woo là các tham chiếu (giá trị) cho các đối tượng mới của chúng ta.

Chúng ta có thể truy cập thuộc tính class bằng cách sử dụng __class__.species. Các thuộc tính của lớp là giống nhau cho tất cả các trường hợp của một lớp. Tương tự, chúng tôi truy cập các thuộc tính cá thể bằng cách sử dụng blu.nameblu.age. Tuy nhiên, các thuộc tính cá thể là khác nhau đối với mọi cá thể của một lớp.

Để tìm hiểu thêm về các lớp và đối tượng, hãy chuyển đến Lớp và đối tượng trong Python

Phương pháp

Phương thức là các hàm được định nghĩa bên trong phần thân của một lớp. Chúng được sử dụng để xác định các hành vi của một đối tượng.

Ví dụ 2: Tạo các phương thức trong Python

 class Parrot: # instance attributes def __init__(self, name, age): self.name = name self.age = age # instance method def sing(self, song): return "() sings ()".format(self.name, song) def dance(self): return "() is now dancing".format(self.name) # instantiate the object blu = Parrot("Blu", 10) # call our instance methods print(blu.sing("'Happy'")) print(blu.dance())

Đầu ra

 Blu hát 'Happy' Blu bây giờ đang nhảy

Trong chương trình trên, chúng tôi xác định hai phương thức tức là sing()dance(). Chúng được gọi là các phương thức thể hiện vì chúng được gọi trên một đối tượng thể hiện tức là blu.

Di sản

Inheritance is a way of creating a new class for using details of an existing class without modifying it. The newly formed class is a derived class (or child class). Similarly, the existing class is a base class (or parent class).

Example 3: Use of Inheritance in Python

 # parent class class Bird: def __init__(self): print("Bird is ready") def whoisThis(self): print("Bird") def swim(self): print("Swim faster") # child class class Penguin(Bird): def __init__(self): # call super() function super().__init__() print("Penguin is ready") def whoisThis(self): print("Penguin") def run(self): print("Run faster") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()

Output

 Bird is ready Penguin is ready Penguin Swim faster Run faster

In the above program, we created two classes i.e. Bird (parent class) and Penguin (child class). The child class inherits the functions of parent class. We can see this from the swim() method.

Again, the child class modified the behavior of the parent class. We can see this from the whoisThis() method. Furthermore, we extend the functions of the parent class, by creating a new run() method.

Additionally, we use the super() function inside the __init__() method. This allows us to run the __init__() method of the parent class inside the child class.

Encapsulation

Using OOP in Python, we can restrict access to methods and variables. This prevents data from direct modification which is called encapsulation. In Python, we denote private attributes using underscore as the prefix i.e single _ or double __.

Example 4: Data Encapsulation in Python

 class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: ()".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # change the price c.__maxprice = 1000 c.sell() # using setter function c.setMaxPrice(1000) c.sell()

Output

 Selling Price: 900 Selling Price: 900 Selling Price: 1000

In the above program, we defined a Computer class.

We used __init__() method to store the maximum selling price of Computer. We tried to modify the price. However, we can't change it because Python treats the __maxprice as private attributes.

As shown, to change the value, we have to use a setter function i.e setMaxPrice() which takes price as a parameter.

Polymorphism

Polymorphism is an ability (in OOP) to use a common interface for multiple forms (data types).

Suppose, we need to color a shape, there are multiple shape options (rectangle, square, circle). However we could use the same method to color any shape. This concept is called Polymorphism.

Example 5: Using Polymorphism in Python

 class Parrot: def fly(self): print("Parrot can fly") def swim(self): print("Parrot can't swim") class Penguin: def fly(self): print("Penguin can't fly") def swim(self): print("Penguin can swim") # common interface def flying_test(bird): bird.fly() #instantiate objects blu = Parrot() peggy = Penguin() # passing the object flying_test(blu) flying_test(peggy)

Output

 Parrot can fly Penguin can't fly

In the above program, we defined two classes Parrot and Penguin. Each of them have a common fly() method. However, their functions are different.

Để sử dụng tính đa hình, chúng ta đã tạo một giao diện chung, tức là flying_test()hàm nhận bất kỳ đối tượng nào và gọi fly()phương thức của đối tượng . Do đó, khi chúng ta truyền các đối tượng blu và peggy trong flying_test()hàm, nó đã chạy hiệu quả.

Các điểm chính cần nhớ:

  • Lập trình hướng đối tượng làm cho chương trình dễ hiểu cũng như hiệu quả.
  • Vì lớp có thể chia sẻ được, mã có thể được sử dụng lại.
  • Dữ liệu an toàn và bảo mật với dữ liệu trừu tượng.
  • Tính đa hình cho phép cùng một giao diện cho các đối tượng khác nhau, do đó các lập trình viên có thể viết mã hiệu quả.

thú vị bài viết...