Các lớp và đối tượng Python
Category: Python
Một lớp trong Python là một mẫu do người dùng định nghĩa để tạo các đối tượng. Nó đóng gói dữ liệu và hàm lại với nhau, giúp quản lý và sử dụng chúng dễ dàng hơn. Khi chúng ta tạo một lớp mới, chúng ta định nghĩa một loại đối tượng mới. Sau đó, chúng ta có thể tạo nhiều phiên bản của loại đối tượng này.
Các lớp được tạo bằng từ khóa class . Thuộc tính là các biến được định nghĩa bên trong lớp và biểu diễn các thuộc tính của lớp. Thuộc tính có thể được truy cập bằng toán tử dot . (ví dụ: MyClass.my_attribute).
Tạo một lớp
# định nghĩa một lớp
class Dog:
sound = "bark" # thuộc tính lớp
Tạo đối tượng
Đối tượng là một thể hiện của Lớp. Nó đại diện cho một triển khai cụ thể của lớp và chứa dữ liệu riêng của nó.
Bây giờ, chúng ta hãy tạo một đối tượng từ lớp Dog.
class Dog:
sound = "bark"
# Tạo một đối tượng từ lớp
dog1 = Dog()
# Truy cập thuộc tính lớp
print(dog1.sound)
Thuộc tính sound là thuộc tính của lớp. Thuộc tính này được chia sẻ trên tất cả các phiên bản của lớp Dog, do đó có thể truy cập trực tiếp thông qua phiên bản dog1 .
Sử dụng hàm init()
Trong Python, lớp có hàm init() . Nó tự động khởi tạo các thuộc tính của đối tượng khi một đối tượng được tạo ra.
class Dog:
species = "Canine" # Thuộc tính lớp
def __init__(self, name, age):
self.name = name # Thuộc tính thể hiện
self.age = age # Thuộc tính thể hiện
Giải thích :
lớp Dog: Định nghĩa một lớp có tên là Dog.
loài: Thuộc tính lớp được chia sẻ bởi tất cả các thể hiện của lớp.
Phương thức init: Khởi tạo các thuộc tính name và age khi một đối tượng mới được tạo.
Khởi tạo đối tượng với init
class Dog:
species = "Canine" # Thuộc tính lớp
def __init__(self, name, age):
self.name = name # Thuộc tính thể hiện (instance)
self.age = age # Thuộc tính thể hiện (instance)
# Tạo một đối tượng của lớp Dog
dog1 = Dog("Buddy", 3)
print(dog1.name) # Kết quả: Buddy
print(dog1.species) # Kết quả: Canine
Đầu ra:
Buddy
Canine
Giải thích:
dog1 = Dog("Buddy", 3): Tạo một đối tượng của lớp Dog với tên là "Buddy" và tuổi là 3.
dog1.name: Truy cập tên thuộc tính thể hiện của đối tượng dog1.
dog1.species: Truy cập thuộc tính lớp species của đối tượng dog1.
Tham số self
tham số self là tham chiếu đến thể hiện hiện tại của lớp. Nó cho phép chúng ta truy cập các thuộc tính và phương thức của đối tượng
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} is barking!")
# Tạo một thể hiện của Dog
dog1 = Dog("Buddy", 3)
dog1.bark()
Đầu ra:
Buddy is barking!
Giải thích:
Bên trong bark(), self.name truy cập tên con chó cụ thể và in ra.
Khi chúng ta gọi dog1.bark(), Python sẽ tự động truyền dog1 thành self, cho phép truy cập vào các thuộc tính của nó.
Phương pháp str
Phương thức str trong Python cho phép chúng ta định nghĩa một biểu diễn chuỗi tùy chỉnh của một đối tượng. Theo mặc định, khi chúng ta in một đối tượng hoặc chuyển đổi nó thành một chuỗi bằng str(), Python sử dụng triển khai mặc định, trả về một chuỗi như <__main__.ClassName object at 0x00000123>.
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} is {self.age} years old." # Đúng: Trả về một chuỗi
dog1 = Dog("Buddy", 3)
dog2 = Dog("Charlie", 5)
print(dog1)
print(dog2)
Đầu ra:
Buddy is 3 years old.
Charlie is 5 years old.
Giải thích:
str Triển khai: Được định nghĩa là một phương thức trong lớp Dog. Sử dụng tham số self để truy cập các thuộc tính của thể hiện (tên và tuổi).
Đầu ra có thể đọc được: Khi print(dog1) được gọi, Python tự động sử dụng phương thức str để lấy chuỗi biểu diễn của đối tượng. Nếu không có str, việc gọi print(dog1) sẽ tạo ra thứ gì đó giống như <__main__.Dog object at 0x00000123>.
Biến lớp và biến thể hiện trong Python
Trong Python, các biến được định nghĩa trong một lớp có thể là biến lớp hoặc biến thể hiện và việc hiểu được sự khác biệt giữa chúng rất quan trọng đối với lập trình hướng đối tượng.
Biến lớp
Đây là các biến được chia sẻ trên tất cả các thể hiện của một lớp. Nó được định nghĩa ở cấp độ lớp, bên ngoài bất kỳ phương thức nào. Tất cả các đối tượng của lớp chia sẻ cùng một giá trị cho một biến lớp trừ khi được ghi đè rõ ràng trong một đối tượng.
Biến thể hiện
Các biến duy nhất cho mỗi thể hiện (đối tượng) của một lớp. Các biến này được định nghĩa trong phương thức init hoặc các phương thức thể hiện khác. Mỗi đối tượng duy trì bản sao riêng của các biến thể hiện, độc lập với các đối tượng khác.
Ví dụ:
class Dog:
# Biến lớp (Class variable)
species = "Canine"
def __init__(self, name, age):
# Biến thể hiện (Instance variables)
self.name = name
self.age = age
# Tạo các đối tượng
dog1 = Dog("Buddy", 3)
dog2 = Dog("Charlie", 5)
# Truy cập biến lớp và biến thể hiện
print(dog1.species) # (Biến lớp)
print(dog1.name) # (Biến thể hiện)
print(dog2.name) # (Biến thể hiện)
# Thay đổi biến thể hiện
dog1.name = "Max"
print(dog1.name) # (Biến thể hiện đã được cập nhật)
# Thay đổi biến lớp
Dog.species = "Feline"
print(dog1.species) # (Biến lớp đã được cập nhật)
print(dog2.species)
Đầu ra:
Canine
Buddy
Charlie
Max
Feline
Feline
Giải thích:
Biến lớp (species): Được chia sẻ bởi tất cả các thể hiện của lớp. Thay đổi Dog.species ảnh hưởng đến tất cả các đối tượng vì đây là thuộc tính của chính lớp đó.
Biến thể hiện (tên, tuổi): Được định nghĩa trong phương thức init. Duy nhất cho mỗi thể hiện (ví dụ: dog1.name và dog2.name khác nhau).
Truy cập Biến: Biến lớp có thể được truy cập thông qua tên lớp (Dog.species) hoặc đối tượng (dog1.species). Biến thể hiện được truy cập thông qua đối tượng (dog1.name).
Cập nhật biến: Thay đổi Dog.species ảnh hưởng đến tất cả các trường hợp. Thay đổi dog1.name chỉ ảnh hưởng đến dog1 và không ảnh hưởng đến dog2.
Published on Jun 19, 2025