Hướng dẫn special method in python - phương pháp đặc biệt trong python

Dẫn nhập

Ở các bài trước, bạn đọc đã tìm hiểu về TÍNH KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON.

Còn ở bài này, bạn đọc sẽ biết tới một số những phương thức đặc biệt. Tổng quát thì nó gần giống như một regular method nhưng nó đặc biệt hơn một vài chỗ.phương thức đặc biệt. Tổng quát thì nó gần giống như một regular method nhưng nó đặc biệt hơn một vài chỗ.


Nội dung

Để theo dõi bài này một cách tốt nhất, bạn nên có có những kiến thức cơ bản về Python trong khóa LẬP TRÌNH PYTHON CƠ BẢN

Nếu bạn chưa có thời gian để học hết khóa trên thì hãy đảm bảo đã tìm hiểu những kiến thức sau đây

  • BIẾN và CÁC KIỂU DỮ LIỆU CƠ BẢN của Python (Số, chuỗi, List, Tuple, Dict, Set, Range)
  • Một số toán tử cơ bản (+, -, *, /, %)
  • Khối lệnh điều kiện Khối vòng lặp như VÒNG LẶP FOR, VÒNG LẶP IF)
  • HÀM

Và đương nhiên để học tiếp bài sau, bạn phải nắm vững kiến thức ở các bài trước: 

  • LỚP & ĐỐI TƯỢNG TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
  • KHAI BÁO THUỘC TÍNH LỚP TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
  • CÁC PHƯƠNG THỨC LỚP TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
  • TẠO LỚP KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI PYTHON

Trong bài này,Bạn và Kteam sẽ cùng tìm hiểu những nội dụng sau đây:

  • Giới thiệu chung về phương thức đặc biệt
  • Giới thiệu một số phương thức đặc biệt

Giới thiệu chung về phương thức đặc biệt

Giới thiệu một số phương thức đặc biệt, tiếng Anh là Special method, đôi lúc người ta còn gọi là Magic method hoặc Dunder method. Những phương thức này đã được quy ước sẵn tên. Định dạng chung của các phức thức này là __tên phương thức __. Và chúng ta đã tìm hiểu một special method rồi đấy. Nếu bạn đọc chưa nhớ ra thì đó chính là hàm constructor của chúng ta. Nó cũng là một special method.

Phương thức đặc biệt, tiếng Anh làSpecial method, đôi lúc người ta còn gọi là Magic method hoặc Dunder method. Những phương thức này đã được quy ước sẵn tên. Định dạng chung của các phức thức này là __tên phương thức __. Và chúng ta đã tìm hiểu một special method rồi đấy. Nếu bạn đọc chưa nhớ ra thì đó chính là hàm constructor của chúng ta. Nó cũng là một special method.special method, mỗi special method lại có một công dụng khác nhau, việc chúng ta là dựa theo khuôn mẫu đó để viết theo ý chúng ta. Nếu bạn đọc còn chưa mường tượng được vấn đề thì không sao cả. Chúng ta sẽ đến với một số ví dụ để hiểu hơn


Giới thiệu một số phương thức đặc biệt

Phương thức đặc biệt, tiếng Anh làSpecial method, đôi lúc người ta còn gọi là Magic method hoặc Dunder method. Những phương thức này đã được quy ước sẵn tên. Định dạng chung của các phức thức này là __tên phương thức __. Và chúng ta đã tìm hiểu một special method rồi đấy. Nếu bạn đọc chưa nhớ ra thì đó chính là hàm constructor của chúng ta. Nó cũng là một special method.class đơn giản kèm theo một đối tượng thuộc lớp đó:

class SieuNhan:
    suc_manh = 50
    def __init__(self, para_ten, para_vu_khi, para_mau_sac):
        self.ten = para_ten
        self.vu_khi = para_vu_khi
        self.mau_sac = para_mau_sac

SN_A = SieuNhan('Sieu nhan Do', 'Kiem', 'Do')

Có rất nhiều special method, mỗi special method lại có một công dụng khác nhau, việc chúng ta là dựa theo khuôn mẫu đó để viết theo ý chúng ta. Nếu bạn đọc còn chưa mường tượng được vấn đề thì không sao cả. Chúng ta sẽ đến với một số ví dụ để hiểu hơn

print(SN_A)

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

<__main__.SieuNhan object at 0x00BCA4D0>

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta: __str__. Bạn đọc xem ví dụ sau đây, ta sẽ viết thêm cho lớp một phương thức nữa: 

def __str__(self):
    return 'Day la {}, su dung {}'.format(self.ten, self.vu_khi)

 Kết quả:__str__ này được gọi đến và trả về kết quả như bạn muốn

 Nếu bạn muốn khi in ra mà ta có một miêu tả rõ ràng về thứ này là gì, thì ta sẽ nên sử dụng hàm __str__. Bạn đọc xem ví dụ sau đây, ta sẽ viết thêm cho lớp một phương thức nữa: 

Day la Sieu nhan Do, su dung Kiem

 Thì khi in ra, hàm __str__ này được gọi đến và trả về kết quả như bạn muốn__str__ này còn có một anh em họ nữa là phương thức __repr__

def __repr__(self):
    return 'ten: {}\nvu khi: {}\nmau sac: {}'.format(self.ten, self.vu_khi, self.mau_sac)

Kết quả:print. Nếu như lớp của bạn cùng có cả 2 phương thức __str__ __repr__ thì hàm print ưu tiên dùng __str__ hơn. Còn trên interactive prompt khi không dùng hàm print thì sẽ ưu tiên __repr__ hơn. Tuy nhiên ta vẫn có cách để gọi __repr__ nếu cần (ngoài cách gọi trực tiếp đối tượng.__repr__()). Vì mục đích của __repr__ cho thông tin chi tiết cụ thể về đối tượng, còn __str__ chỉ đơn giản là giá trị. Ta nghĩ đơn giản như ta là một đối tượng, mỗi khi ta gọi hàm __str__ thì nó sẽ trả về hình ảnh bề da thịt của cơ thể chúng ta, còn nếu gọi __repr__ thì trả về hình ảnh xương cốt, gân, cơ bắp của cơ thể chúng ta.

 Phương thức __str__ này còn có một anh em họ nữa là phương thức __repr__

print(SN_A)
print('%s' %SN_A)
print('%r' %SN_A)

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

Day la Sieu nhan Do, su dung Kiem
Day la Sieu nhan Do, su dung Kiem
ten: Sieu nhan Do
vu khi: Kiem
mau sac: Do

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta:len chứ? Bản chất hàm len cũng là một special method. Bạn đọc xem ví dụ sau đây:

s = 'How Kteam'
print(len(s))
print(s.__len__())

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

9
9

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta: special method để có thể sử dụng được hàm len (mặc định thì chưa được)

print(SN_A)
0

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

print(SN_A)
1

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta:special method nữa, thì ta hãy tạo thêm một đối tượng siêu nhân nữa:

print(SN_A)
2

 Kết quả: + của kiểu dữ liệu số hoặc chuỗi, list chứ? Bản chất các toán tử cũng là những special method.

print(SN_A)
3

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

print(SN_A)
4

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta:+ như ví dụ trên chẳng hạn.

print(SN_A)
5

 Kết quả:

print(SN_A)
6

Trước tiên là ta tạo một class đơn giản kèm theo một đối tượng thuộc lớp đó:

print(SN_A)
7

 Còn nhớ trong bài đầu LỚP & ĐỐI TƯỢNG, khi ta thử in đối tượng, nó sẽ ra một dòng mới nhìn vào là thấy chẳng có thông tin gì hữu ích cho ta:

 Kết quả:


 Nếu bạn muốn khi in ra mà ta có một miêu tả rõ ràng về thứ này là gì, thì ta sẽ nên sử dụng hàm __str__. Bạn đọc xem ví dụ sau đây, ta sẽ viết thêm cho lớp một phương thức nữa: 

 Thì khi in ra, hàm __str__ này được gọi đến và trả về kết quả như bạn muốn

Kết quả:

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”Luyện tập – Thử thách – Không ngại khó


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.