Python là một ngôn ngữ lập trình hướng đối tượng (OOP), trong đó class và object là hai khái niệm cơ bản và quan trọng. Class là một bản thiết kế (blueprint) cho các đối tượng, định nghĩa các thuộc tính (attributes) và phương thức (methods) mà các đối tượng của class đó sẽ có. Object là một thể hiện cụ thể của class, chứa dữ liệu và có thể thực hiện các hành vi được định nghĩa trong class.
Các loại phương thức trong Python
Trong Python, có ba loại phương thức chính trong class: instance method, class method, và static method. Mỗi loại phương thức có cách sử dụng và mục đích riêng.
Instance Method
Instance method là các phương thức có thể truy cập và thay đổi trạng thái của một đối tượng cụ thể. Chúng được định nghĩa bên trong class và luôn có tham số đầu tiên là self
, đại diện cho đối tượng hiện tại.
Cú pháp
python
class MyClass:
def instance_method(self, arg1, arg2):
# Thực hiện các thao tác với self
pass
Ví dụ
python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
# Tạo một đối tượng Person
person = Person("Alice", 30)
# Gọi instance method
person.greet()
Kết quả:
Hello, my name is Alice and I am 30 years old.
Trong ví dụ trên, greet
là một instance method có thể truy cập và sử dụng các thuộc tính name
và age
của đối tượng person
.
Class Method
Class method là các phương thức có thể truy cập và thay đổi trạng thái của class, thay vì của một đối tượng cụ thể. Chúng được định nghĩa bằng cách sử dụng decorator @classmethod
và có tham số đầu tiên là cls
, đại diện cho class hiện tại.
Cú pháp
python
class MyClass:
@classmethod
def class_method(cls, arg1, arg2):
# Thực hiện các thao tác với cls
pass
Ví dụ
python
class Person:
population = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.population += 1
@classmethod
def get_population(cls):
print(f"Current population: {cls.population}")
# Tạo các đối tượng Person
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
# Gọi class method
Person.get_population()
Kết quả:
Current population: 2
Trong ví dụ trên, get_population
là một class method có thể truy cập và sử dụng thuộc tính population
của class Person
.
Static Method
Static method là các phương thức không truy cập hoặc thay đổi trạng thái của class hoặc đối tượng. Chúng được định nghĩa bằng cách sử dụng decorator @staticmethod
và không có tham số đặc biệt nào.
Cú pháp
python
class MyClass:
@staticmethod
def static_method(arg1, arg2):
# Thực hiện các thao tác không liên quan đến class hoặc đối tượng
pass
Ví dụ
python
class Math:
@staticmethod
def add(a, b):
return a + b
# Gọi static method
result = Math.add(5, 3)
print(result)
Kết quả:
8
Trong ví dụ trên, add
là một static method không truy cập hoặc thay đổi trạng thái của class Math
.
Các phương thức đặc biệt trong Python
Python cung cấp một số phương thức đặc biệt (special methods) có tên bắt đầu và kết thúc bằng hai dấu gạch dưới (__
). Các phương thức này cho phép bạn định nghĩa các hành vi đặc biệt cho các đối tượng của class.
Constructor (__init__
)
Constructor là một phương thức đặc biệt được gọi tự động khi một đối tượng mới được tạo. Nó thường được sử dụng để khởi tạo các thuộc tính của đối tượng.
Cú pháp
python
class MyClass:
def __init__(self, arg1, arg2):
# Khởi tạo các thuộc tính
self.attr1 = arg1
self.attr2 = arg2
Ví dụ
python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Tạo một đối tượng Person
person = Person("Alice", 30)
# Truy cập các thuộc tính
print(person.name)
print(person.age)
Kết quả:
Alice
30
Trong ví dụ trên, phương thức __init__
được sử dụng để khởi tạo các thuộc tính name
và age
của đối tượng person
.
Destructor (__del__
)
Destructor là một phương thức đặc biệt được gọi tự động khi một đối tượng bị xoá hoặc không còn được sử dụng. Nó thường được sử dụng để giải phóng tài nguyên hoặc thực hiện các thao tác dọn dẹp.
Cú pháp
python
class MyClass:
def __del__(self):
# Thực hiện các thao tác dọn dẹp
pass
Ví dụ
python
class Person:
def __init__(self, name):
self.name = name
print(f"{self.name} has been created.")
def __del__(self):
print(f"{self.name} has been deleted.")
# Tạo và xoá một đối tượng Person
person = Person("Alice")
del person
Kết quả:
Alice has been created.
Alice has been deleted.
Trong ví dụ trên, phương thức __del__
được sử dụng để in ra thông báo khi đối tượng person
bị xoá.
Phương thức đại diện chuỗi (__str__
và __repr__
)
Phương thức __str__
và __repr__
được sử dụng để định nghĩa cách hiển thị đối tượng dưới dạng chuỗi. __str__
được sử dụng cho người dùng cuối, trong khi __repr__
được sử dụng cho lập trình viên.
Cú pháp
python
class MyClass:
def __str__(self):
# Trả về chuỗi đại diện cho đối tượng
return "String representation"
def __repr__(self):
# Trả về chuỗi đại diện cho đối tượng
return "Official representation"
Ví dụ
python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
def __repr__(self):
return f"Person(name={self.name}, age={self.age})"
# Tạo một đối tượng Person
person = Person("Alice", 30)
# In đối tượng
print(person)
print(repr(person))
Kết quả:
Person(name=Alice, age=30)
Person(name=Alice, age=30)
Trong ví dụ trên, phương thức __str__
và __repr__
được sử dụng để định nghĩa cách hiển thị đối tượng person
dưới dạng chuỗi.
Các phương thức khác trong Python
Ngoài các phương thức đặc biệt, Python còn cung cấp nhiều phương thức khác để thao tác với các đối tượng của class.
Phương thức __len__
Phương thức __len__
được sử dụng để trả về độ dài của đối tượng. Nó thường được sử dụng với các đối tượng có thể đếm được, như danh sách hoặc chuỗi.
Cú pháp
python
class MyClass:
def __len__(self):
# Trả về độ dài của đối tượng
return length
Ví dụ
python
class MyList:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
# Tạo một đối tượng MyList
my_list = MyList([1, 2, 3, 4, 5])
# Lấy độ dài của đối tượng
print(len(my_list))
Kết quả:
5
Trong ví dụ trên, phương thức __len__
được sử dụng để trả về độ dài của đối tượng my_list
.
Phương thức __getitem__
, __setitem__
, và __delitem__
Các phương thức __getitem__
, __setitem__
, và __delitem__
được sử dụng để truy cập, gán giá trị, và xoá các phần tử của đối tượng bằng cách sử dụng cú pháp chỉ số.
Cú pháp
python
class MyClass:
def __getitem__(self, key):
# Trả về giá trị của phần tử tại vị trí key
return value
def __setitem__(self, key, value):
# Gán giá trị cho phần tử tại vị trí key
pass
def __delitem__(self, key):
# Xoá phần tử tại vị trí key
pass
Ví dụ
python
class MyList:
def __init__(self, items):
self.items = items
def __getitem__(self, index):
return self.items[index]
def __setitem__(self, index, value):
self.items[index] = value
def __delitem__(self, index):
del self.items[index]
# Tạo một đối tượng MyList
my_list = MyList([1, 2, 3, 4, 5])
# Truy cập phần tử
print(my_list[2])
# Gán giá trị cho phần tử
my_list[2] = 10
print(my_list[2])
# Xoá phần tử
del my_list[2]
print(my_list.items)
Kết quả:
3
10
[1, 2, 4, 5]
Trong ví dụ trên, các phương thức __getitem__
, __setitem__
, và __delitem__
được sử dụng để truy cập, gán giá trị, và xoá các phần tử của đối tượng my_list
.
Kết luận
Phương thức là một phần quan trọng của lập trình hướng đối tượng trong Python. Chúng cho phép bạn định nghĩa các hành vi của đối tượng và tương tác với các thuộc tính của đối tượng. Python cung cấp nhiều loại phương thức khác nhau, bao gồm instance method, class method, static method, và các phương thức đặc biệt như __init__
, __del__
, __str__
, __repr__
, __len__
, __getitem__
, __setitem__
, và __delitem__
. Hiểu rõ cách sử dụng các phương thức này sẽ giúp bạn viết mã Python hiệu quả và dễ bảo trì hơn.
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về các phương thức của class trong Python và cách sử dụng chúng trong lập trình hướng đối tượng.