Python - Các Hàm Khởi Tạo: Xây Dựng Nền Tảng Của Các Đối Tượng

Chào mừng, các nhà lập trình Python đam mê! Hôm nay, chúng ta sẽ bước vào thế giới thú vị của các hàm khởi tạo. Đừng lo nếu bạn mới bắt đầu học lập trình; tôi sẽ hướng dẫn bạn qua khái niệm này bước từng bước, như cách tôi đã làm cho nhiều học viên khác trong những năm dạy học. Vậy, hãy lấy ly đồ uống yêu thích của bạn, làm mình thoải mái, và hãy cùng nhau bắt đầu hành trình thú vị này!

Python - Constructors

Các Hàm Khởi Tạo Là Gì?

Trước khi bước vào chi tiết, hãy hiểu rõ các hàm khởi tạo là gì. Hãy tưởng tượng bạn đang xây một ngôi nhà. Hàm khởi tạo như một bản kế hoạch và quá trình đặt nền ban đầu kết hợp. Nó là phương thức đặc biệt mà được gọi khi bạn tạo một đối tượng mới (hoặc "thể hiện") của một lớp.

Tạo Các Hàm Khởi Tạo Trong Python

Trong Python, các hàm khởi tạo được tạo bằng cách sử dụng phương thức đặc biệt __init__(). Phương thức này sẽ được gọi tự động khi bạn tạo một đối tượng mới của một lớp.

Hãy bắt đầu với một ví dụ đơn giản:

class House:
def __init__(self):
print("Một ngôi nhà mới đang được xây dựng!")

my_house = House()

Khi bạn chạy mã này, bạn sẽ thấy thông điệp "Một ngôi nhà mới đang được xây dựng!" được in ra. Điều này xảy ra vì phương thức __init__() được gọi tự động khi chúng ta tạo my_house.

Các Loại Hàm Khởi Tạo Trong Python

Bây giờ, hãy khám phá các loại hàm khởi tạo trong Python. Có hai loại chính:

  1. Hàm Khởi Tạo Mặc Định
  2. Hàm Khởi Tạo Đa Tham Số

Hàm Khởi Tạo Mặc Định Trong Python

Hàm khởi tạo mặc định là hàm không nhận bất kỳ tham số nào (ngoại trừ self). Nếu bạn không định nghĩa bất kỳ hàm khởi tạo nào trong lớp của bạn, Python sẽ cung cấp một hàm khởi tạo mặc định.

class Dog:
def __init__(self):
self.breed = "Không rõ"
self.age = 0

my_dog = Dog()
print(f"Giống chó của tôi: {my_dog.breed}")
print(f"Tuổi của chó của tôi: {my_dog.age}")

Trong ví dụ này, mỗi đối tượng Dog mà chúng ta tạo sẽ có giống chó được đặt là "Không rõ" và tuổi là 0 theo mặc định.

Hàm Khởi Tạo Đa Tham Số

Hàm khởi tạo đa tham số chấp nhận các tham số, cho phép chúng ta khởi tạo các thuộc tính của đối tượng với các giá trị cụ thể khi tạo đối tượng.

class Cat:
def __init__(self, name, color):
self.name = name
self.color = color

my_cat = Cat("Whiskers", "Cam")
print(f"Tên mèo của tôi là {my_cat.name} và nó màu {my_cat.color}.")

Ở đây, chúng ta đang truyền "Whiskers" và "Cam" làm các tham số khi tạo đối tượng Cat. Hàm khởi tạo sử dụng các giá trị này để đặt các thuộc tính namecolor.

Python - Các Phương Thức Thể Hiện

Các phương thức thể hiện là các hàm thuộc về một lớp và có thể truy cập và thay đổi các thuộc tính của đối tượng. Chúng luôn nhận self làm tham số đầu tiên.

class Bird:
def __init__(self, species):
self.species = species
self.can_fly = True

def describe(self):
if self.can_fly:
return f"Tôi là một {self.species} và tôi có thể bay!"
else:
return f"Tôi là một {self.species} nhưng tôi không thể bay."

def set_flying_ability(self, can_fly):
self.can_fly = can_fly

parrot = Bird("Vẹt")
print(parrot.describe())  # Output: Tôi là một Vẹt và tôi có thể bay!

penguin = Bird("Chim cánh cụt")
penguin.set_flying_ability(False)
print(penguin.describe())  # Output: Tôi là một Chim cánh cụt nhưng tôi không thể bay.

Trong ví dụ này, describe()set_flying_ability() là các phương thức thể hiện. Chúng có thể truy cập và thay đổi các thuộc tính của đối tượng bằng cách sử dụng self.

Python Có Nhiều Hàm Khởi Tạo

Python không hỗ trợ tải chồng phương thức theo cách truyền thống, vì vậy chúng ta không thể có nhiều __init__() phương thức. Tuy nhiên, chúng ta có thể mô phỏng nhiều hàm khởi tạo bằng cách sử dụng các phương thức lớp.

class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width

@classmethod
def create_square(cls, side_length):
return cls(side_length, side_length)

def area(self):
return self.length * self.width

rect = Rectangle(4, 5)
print(f"Diện tích hình chữ nhật: {rect.area()}")  # Output: Diện tích hình chữ nhật: 20

square = Rectangle.create_square(4)
print(f"Diện tích hình vuông: {square.area()}")  # Output: Diện tích hình vuông: 16

Ở đây, create_square() là một phương thức lớp đóng vai trò như một hàm khởi tạo thay thế để tạo các hình vuông.

Kết Luận

Các hàm khởi tạo là các cầu nhận của việc tạo đối tượng trong Python. Chúng thiết lập bối cảnh cho cách các đối tượng của chúng ta sẽ hành xử và những dữ liệu chúng sẽ chứa. Khi bạn tiếp tục hành trình Python của mình, bạn sẽ tìm thấy các hàm khởi tạo là những công cụ không thể thiếu để tạo ra mã mạnh mẽ và linh hoạt.

Hãy nhớ, luyện tập sẽ làm bạn hoàn hảo! Thử tạo các lớp của riêng bạn với các loại hàm khởi tạo khác nhau. Thử nghiệm với các phương thức thể hiện và các hàm khởi tạo thay thế. Càng thử nghiệm nhiều với các khái niệm này, càng tự nhiên chúng sẽ trở thành.

Chúc mừng mã nguồn, các nhà lập trình Python tương lai! ??

Phương Thức Mô Tả Ví Dụ
__init__(self, ...) Phương thức khởi tạo, được gọi khi tạo đối tượng mới def __init__(self, name): self.name = name
Phương Thức Thể Hiện Các phương thức thông thường có thể truy cập và thay đổi các thuộc tính của đối tượng def describe(self): return f"Tôi là {self.name}"
@classmethod Đèn trên để tạo các hàm khởi tạo thay thế hoặc các phương thức cấp lớp @classmethod def create_default(cls): return cls("Mặc định")
@staticmethod Đèn trên cho các phương thức không cần truy cập vào các thuộc tính của lớp hoặc đối tượng @staticmethod def validate_name(name): return len(name) > 0

Credits: Image by storyset