Một class là một prototype do người dùng định nghĩa mà từ đó các Object được tạo ra. Các class cung cấp phương pháp kết hợp dữ liệu và chức năng lại với nhau. Việc tạo một class mới sẽ tạo ra một loại Object mới, cho phép tạo các instance mới của loại đó. Mỗi instance của class có thể có các attributes hay thuộc tính gắn liền với nó để duy trì trạng thái của nó. Các instance của class hay thể hiện cũng có thể có các phương thức (do class của chúng định nghĩa) để sửa đổi trạng thái của chúng.
Các bài viết liên quan:
Để hiểu nhu cầu tạo một class trong Python, hãy xem xét một ví dụ, giả sử bạn muốn theo dõi số lượng chó có thể có các attributes khác nhau như giống và tuổi. Nếu một danh sách được sử dụng, phần tử đầu tiên có thể là giống chó trong khi phần tử thứ hai có thể đại diện cho tuổi của nó. Giả sử có 100 con chó khác nhau, thì làm sao bạn biết phần tử nào được cho là phần tử nào? Điều gì sẽ xảy ra nếu bạn muốn thêm các attributes khác cho những chú chó này? Điều này thiếu tổ chức và đó là nhu cầu chính xác cho các class học.
class ClassName: # Statement
class tạo cấu trúc dữ liệu do người dùng định nghĩa, chứa các thành viên dữ liệu và hàm thành viên của riêng nó, có thể được truy cập và sử dụng bằng cách tạo một instance của class đó. Một class giống như một bản thiết kế cho một Object.
Một số điểm đặc biệt trên class Python:
- Các class được tạo bởi class từ khóa.
- attributes là các biến thuộc về một class.
- Các attributes luôn public và có thể được truy cập bằng toán tử dấu chấm (.). Ví dụ: Myclass.Myattribute
Định nghĩa một class
class example: pass
Trong ví dụ trên, từ khóa class chỉ ra rằng bạn đang tạo một class theo sau là tên của class (trong trường hợp này là example).
Object class
Một Object là một instance của một class. Một class giống như một bản thiết kế trong khi một instance là một bản sao của class với các giá trị thực. Nó không còn là một ý tưởng nữa, nó là một đối tượng thực sự có những attributes một cách cụ thể.
Một Object bao gồm:
- State: Nó được đại diện bởi các attributes của một Object. Nó cũng phản ánh các attributes của một Object.
- Behaviour: Nó được biểu diễn bằng các methods của một Object. Nó cũng phản ánh phản ứng của một Object với các Object khác.
- Identity: Nó cung cấp một tên duy nhất cho một Object và cho phép một Object tương tác với các Object khác.
Khai báo các Object (Còn gọi là khởi tạo một class)
Khi một Object của một class được tạo ra, class đó được cho là đã được khởi tạo. Tất cả các instance chia sẻ các attributes và method của class. Nhưng các giá trị của các attributes đó, tức là trạng thái là duy nhất cho từng Object. Một class duy nhất có thể có bất kỳ số lượng phiên bản nào.
Ví dụ:
#định nghĩa class Dog class Dog: #thuộc tính attr1 và attr2 attr1 = "mammal" attr2 = "dog" # hành vi hay method của class def fun(self): print("I'm a", self.attr1) print("I'm a", self.attr2) #khởi tạo đối tượng Dog, roger là instance Rodger = Dog() #truy vấn vào attr1 của class print(Rodger.attr1) #gọi hành vi fun() Rodger.fun()
Trong ví dụ trên, một Object được tạo về cơ bản là một con chó tên là Rodger. class này chỉ có hai attributes class cho chúng ta biết rằng Rodger là chó và động vật có vú.
The self trong python
Self đại diện cho instance của lớp. Bằng cách sử dụng “self”, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong python. Nó liên kết các thuộc tính với các đối số đã cho.
Lý do bạn cần sử dụng self. là do Python không sử dụng cú pháp @ để chỉ các thuộc tính thể hiện. Python đã quyết định thực hiện các phương thức theo cách làm cho thể hiện của phương thức đó được truyền tự động nhưng không được nhận tự động: tham số đầu tiên của phương thức là thể hiện mà phương thức được gọi.
- Các phương thức class phải có thêm một tham số đầu tiên trong định nghĩa phương thức. Chúng tôi không đưa ra một giá trị cho tham số này khi chúng tôi gọi phương thức, Python cung cấp nó tham số đầu tiên đó là Self.
- Nếu chúng ta có một phương thức không có đối số, thì chúng ta vẫn có một đối số là Self.
- Self tương tự với con trỏ này trong C++ và tham chiếu này trong Java.
Khi chúng ta gọi một phương thức của Object này là myobject.method(arg1, arg2), Python sẽ tự động chuyển đổi phương thức này thành MyClass.method(myobject, arg1, arg2) – đây là tất cả những gì đặc biệt về Self.
Phương thức __init__
Phương thức __init__ tương tự như hàm tạo trong C++ và Java. Constructor được sử dụng để khởi tạo trạng thái của Object. Giống như các phương thức, một hàm tạo cũng chứa một tập hợp các câu lệnh (tức là các hướng dẫn) được thực thi tại thời điểm tạo Object. Nó chạy ngay khi một Object của một class được khởi tạo. Phương pháp này rất hữu ích để thực hiện bất kỳ khởi tạo nào bạn muốn thực hiện với Object của mình.
# ví dụ về class person class Person: # khai báo thuộc tính khởi tạo def __init__(self, name): #self đại diện cho instance self.name = name # khai báo phương thức say_hi def say_hi(self): print('Hello, my name is', self.name) #khởi tạo đối tượng Nikhil p = Person('Nikhil') #gọi phương thức say_hi p.say_hi()
Class và Instance Variables
Các biến instance dành cho dữ liệu, duy nhất cho từng instance và các biến class dành cho các attributes và phương thức được chia sẻ bởi tất cả các instance của class. Biến instance là các biến có giá trị được gán bên trong hàm tạo hoặc phương thức với self trong khi biến class là biến có giá trị được gán trong class.
Xác định các biến instance bằng cách sử dụng một hàm tạo.
#định nghĩa class Dog class Dog: # biến animal animal = 'dog' # hàm khởi tạo của Dog def __init__(self, breed, color): # khởi tạo thuộc tính self.breed = breed self.color = color # khởi tạo đối tượng Rodger = Dog("Pug", "brown") Buzo = Dog("Bulldog", "black") #truy xuất vào thuộc tính Rodger print('Rodger là', Rodger.animal) print('Breed: ', Rodger.breed) print('Color: ', Rodger.color) #truy xuất vào thuộc tính Buzo print('Buzo là', Buzo.animal) print('Breed: ', Buzo.breed) print('Color: ', Buzo.color)