Khóa học python

Phương thức của Class trong Python

0 phút đọc

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

class MyClass:
    def instance_method(self, arg1, arg2):
        # Thực hiện các thao tác với self
        pass

Ví dụ

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 nameage 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

class MyClass:
    @classmethod
    def class_method(cls, arg1, arg2):
        # Thực hiện các thao tác với cls
        pass

Ví dụ

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

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ụ

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

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ụ

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 nameage 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

class MyClass:
    def __del__(self):
        # Thực hiện các thao tác dọn dẹp
        pass

Ví dụ

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____repr__)

Phương thức __str____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

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ụ

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____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

class MyClass:
    def __len__(self):
        # Trả về độ dài của đối tượng
        return length

Ví dụ

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

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ụ

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.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

How to call base class constructor from child class in TypeScript?

entry

Nêu một số đặc điểm của Python?

entry

Liệt kê một số ứng dụng thực tế của Hàng đợi (Queue)?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào