Các lớp và đối tượng Python (Có ví dụ)

Trong hướng dẫn này, bạn sẽ tìm hiểu về chức năng cốt lõi của các đối tượng và lớp Python. Bạn sẽ học lớp là gì, cách tạo và sử dụng nó trong chương trình của bạn.

Video: Các lớp và đối tượng Python

Đối tượng và lớp Python

Python là một ngôn ngữ lập trình hướng đối tượng. Không giống như lập trình hướng thủ tục, trong đó trọng tâm chính là các hàm, lập trình hướng đối tượng nhấn mạnh vào các đối tượng.

Một đối tượng chỉ đơn giản là một tập hợp dữ liệu (biến) và các phương thức (hàm) hoạt động trên những dữ liệu đó. Tương tự, một lớp là bản thiết kế cho đối tượng đó.

Chúng ta có thể coi lớp học như một bản phác thảo (nguyên mẫu) của một ngôi nhà. Nó chứa tất cả các chi tiết về sàn nhà, cửa ra vào, cửa sổ, vv Dựa trên những mô tả này, chúng tôi xây dựng ngôi nhà. Ngôi nhà là đối tượng.

Vì nhiều ngôi nhà có thể được tạo ra từ bản thiết kế của một ngôi nhà, chúng ta có thể tạo ra nhiều đối tượng từ một lớp. Một đối tượng còn được gọi là một thể hiện của một lớp và quá trình tạo đối tượng này được gọi là khởi tạo .

Định nghĩa một lớp trong Python

Giống như định nghĩa hàm bắt đầu bằng từ khóa def trong Python, định nghĩa lớp bắt đầu bằng từ khóa lớp.

Chuỗi đầu tiên bên trong lớp được gọi là docstring và có mô tả ngắn gọn về lớp. Mặc dù không bắt buộc nhưng điều này rất được khuyến khích.

Đây là một định nghĩa lớp đơn giản.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Một lớp tạo ra một không gian tên cục bộ mới nơi tất cả các thuộc tính của nó được xác định. Các thuộc tính có thể là dữ liệu hoặc hàm.

Ngoài ra còn có các thuộc tính đặc biệt trong đó bắt đầu bằng dấu gạch dưới kép __. Ví dụ, __doc__cung cấp cho chúng ta chuỗi doc của lớp đó.

Ngay sau khi chúng ta định nghĩa một lớp, một đối tượng lớp mới được tạo với cùng tên. Đối tượng lớp này cho phép chúng ta truy cập các thuộc tính khác nhau cũng như khởi tạo các đối tượng mới của lớp đó.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Đầu ra

 10 Đây là một hạng người

Tạo một đối tượng trong Python

Chúng tôi thấy rằng đối tượng lớp có thể được sử dụng để truy cập các thuộc tính khác nhau.

Nó cũng có thể được sử dụng để tạo các thể hiện đối tượng mới (tức thời) của lớp đó. Thủ tục tạo một đối tượng tương tự như một lời gọi hàm.

 >>> harry = Person()

Thao tác này sẽ tạo một cá thể đối tượng mới có tên là harry. Chúng ta có thể truy cập thuộc tính của các đối tượng bằng tiền tố tên đối tượng.

Các thuộc tính có thể là dữ liệu hoặc phương thức. Các phương thức của một đối tượng là các hàm tương ứng của lớp đó.

Điều này có nghĩa là, vì Person.greetlà một đối tượng hàm (thuộc tính của lớp), Person.greetsẽ là một đối tượng phương thức.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Đầu ra

  xin chào 

Bạn có thể đã nhận thấy selftham số trong định nghĩa hàm bên trong lớp nhưng chúng tôi đã gọi phương thức đơn giản như harry.greet()không có bất kỳ đối số nào. Nó vẫn hoạt động.

Điều này là do, bất cứ khi nào một đối tượng gọi phương thức của nó, thì bản thân đối tượng đó sẽ được truyền làm đối số đầu tiên. Vì vậy, harry.greet()dịch thành Person.greet(harry).

Nói chung, việc gọi một phương thức có danh sách n đối số tương đương với việc gọi hàm tương ứng với danh sách đối số được tạo bằng cách chèn đối tượng của phương thức trước đối số đầu tiên.

Vì những lý do này, đối số đầu tiên của hàm trong lớp phải là chính đối tượng. Đây được gọi là tự. Nó có thể được đặt tên khác nhưng chúng tôi khuyên bạn nên tuân theo quy ước.

Bây giờ bạn phải làm quen với đối tượng lớp, đối tượng cá thể, đối tượng hàm, đối tượng phương thức và sự khác biệt của chúng.

Constructors trong Python

Các hàm lớp bắt đầu bằng dấu gạch dưới kép __được gọi là các hàm đặc biệt vì chúng có ý nghĩa đặc biệt.

Một mối quan tâm đặc biệt là __init__()chức năng. Hàm đặc biệt này được gọi bất cứ khi nào một đối tượng mới của lớp đó được khởi tạo.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Bất kỳ thuộc tính nào của một đối tượng có thể bị xóa bất cứ lúc nào bằng cách sử dụng delcâu lệnh. Hãy thử các bước sau trên trình bao Python để xem kết quả.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Chúng ta thậm chí có thể xóa chính đối tượng bằng cách sử dụng câu lệnh del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Thật ra, điều đó phức tạp hơn. Khi chúng ta làm như vậy c1 = ComplexNumber(1,3), một đối tượng thể hiện mới được tạo trong bộ nhớ và tên c1 liên kết với nó.

Trên lệnh del c1, ràng buộc này bị loại bỏ và tên c1 bị xóa khỏi không gian tên tương ứng. Tuy nhiên, đối tượng vẫn tiếp tục tồn tại trong bộ nhớ và nếu không có tên nào khác liên kết với nó, nó sẽ tự động bị hủy sau đó.

Việc hủy tự động các đối tượng không được tham chiếu này trong Python còn được gọi là thu gom rác.

Xóa đối tượng trong Python sẽ xóa ràng buộc tên

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