Python đã là một ngôn ngữ hướng đối tượng kể từ khi nó tồn tại. Do đó, việc tạo và sử dụng các lớp và đối tượng hoàn toàn dễ dàng. Chương này giúp bạn trở thành chuyên gia trong việc sử dụng hỗ trợ lập trình hướng đối tượng của Python.
Nếu bạn chưa có bất kỳ kinh nghiệm nào trước đây về lập trình hướng đối tượng (OO), bạn có thể muốn tham khảo một khóa học giới thiệu về nó hoặc ít nhất là một hướng dẫn nào đó để bạn nắm được các khái niệm cơ bản.
Tuy nhiên, đây là phần giới thiệu nhỏ về Lập trình hướng đối tượng (OOP) để mang lại cho bạn tốc độ 

Tổng quan về thuật ngữ OOP

  • Class - Một nguyên mẫu do người dùng định nghĩa cho một đối tượng xác định một tập hợp các thuộc tính đặc trưng cho bất kỳ đối tượng nào của lớp. Các thuộc tính là thành viên dữ liệu (biến lớp và biến phiên bản) và phương thức, được truy cập thông qua ký hiệu dấu chấm.
  • Class variable - Một biến được chia sẻ bởi tất cả các trường hợp của một lớp. Các biến lớp được định nghĩa bên trong một lớp nhưng bên ngoài bất kỳ phương thức nào của lớp. Các biến lớp không được sử dụng thường xuyên như các biến cá thể.
  • Data member - Một biến lớp hoặc biến thể hiện chứa dữ liệu được liên kết với một lớp và các đối tượng của nó.
  • Function overloading - Việc gán nhiều hành vi cho một hàm cụ thể. Thao tác được thực hiện khác nhau tùy theo loại đối tượng hoặc đối số có liên quan.
  • Instance variable - Một biến được định nghĩa bên trong một phương thức và chỉ thuộc về thể hiện hiện tại của một lớp.
  • Inheritance - Sự chuyển giao các đặc tính của một lớp sang các lớp khác có nguồn gốc từ nó.
  • Instance- Một đối tượng riêng lẻ của một lớp nhất định. Ví dụ, một đối tượng thuộc về Vòng tròn lớp là một thể hiện của Vòng tròn lớp.
  • Instantiation- Việc tạo ra một thể hiện của một lớp.
  • Method - Một loại hàm đặc biệt được định nghĩa trong định nghĩa lớp.
  • Object - Một thể hiện duy nhất của cấu trúc dữ liệu được định nghĩa bởi lớp của nó. Một đối tượng bao gồm cả thành viên dữ liệu (biến lớp và biến phiên bản) và phương thức.
  • Operator overloading - Việc gán nhiều hơn một chức năng cho một toán tử cụ thể.

Tạo Classe

Câu lệnh class tạo ra một định nghĩa lớp mới. Tên của class ngay sau class từ khóa, theo sau là dấu hai chấm như sau:
class ClassName:
   'Optional class documentation string'
   class_suite
Class có một chuỗi tài liệu, có thể được truy cập thông qua ClassName .__ doc__ .
Class_suite bao gồm tất cả các câu lệnh thành phần xác định các thành viên của class, các thuộc tính dữ liệu và các chức năng.

Thí dụ

Sau đây là ví dụ về một class Python đơn giản:
class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
  • Biến empCount là một biến class có giá trị được chia sẻ giữa tất cả các trường hợp của một class này. Điều này có thể được truy cập dưới dạng Employee.empCount từ bên trong class hoặc bên ngoài class.
  • Phương thức đầu tiên __init __ () là một phương thức đặc biệt, được gọi là phương thức khởi tạo hoặc phương thức khởi tạo class mà Python gọi khi bạn tạo một thể hiện mới của class này.
  • Bạn khai báo các phương thức class khác giống như các hàm bình thường với ngoại lệ là đối số đầu tiên của mỗi phương thức là chính nó. Python thêm tự đối số vào danh sách cho bạn; bạn không cần phải bao gồm nó khi bạn gọi các phương thức.

Tạo Object

Để tạo các thể hiện của một class, bạn gọi class đó bằng cách sử dụng tên class và truyền vào bất kỳ đối số nào mà phương thức __init__ của nó chấp nhận.
"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)

Truy cập Attributes

Bạn truy cập các thuộc tính của đối tượng bằng cách sử dụng toán tử dấu chấm với đối tượng. Biến lớp sẽ được truy cập bằng cách sử dụng tên lớp như sau:
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
Bây giờ, đặt tất cả các khái niệm lại với nhau:
#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:
Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2
Bạn có thể thêm, xóa hoặc sửa đổi các thuộc tính của lớp và đối tượng bất kỳ lúc nào:
emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.
Thay vì sử dụng các câu lệnh bình thường để truy cập các thuộc tính, bạn có thể sử dụng các hàm sau:
  • getattr(obj, name[, default]) - để truy cập thuộc tính của đối tượng.
  • hasattr(obj,name) - để kiểm tra xem một thuộc tính có tồn tại hay không.
  • setattr(obj,name,value) - để đặt một thuộc tính. Nếu thuộc tính không tồn tại, thì nó sẽ được tạo.
  • delattr(obj, name) - để xóa một thuộc tính.
hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'

Class Attributes