Ghi đè phương thức so với nạp chồng trong Python—sự khác biệt là gì?
- nạp chồng phương thức. tạo một phương thức có thể được gọi với các đối số khác nhau, chẳng hạn như
m[]
vàm[1, 2, 3]
- Ghi đè phương thức. ghi đè chức năng của một phương thức được định nghĩa trong lớp cha
Trong nạp chồng phương thức, các phương thức trong một lớp nhất định có cùng tên nhưng chữ ký khác nhau [= danh sách đối số]. Trong ghi đè phương thức, các phương thức có cùng tên và cùng chữ ký và các phương thức của lớp con sẽ ghi đè các phương thức của lớp cha
Video sau đây giải thích chi tiết hơn về bài viết này
Ghi đè Python so với Quá tải [Giải thích đơn giản]
Xem video này trên YouTube
Quá tải phương thức
nạp chồng phương thức. tạo một phương thức có thể được gọi với các đối số khác nhau
Đây là một ví dụ cho quá tải Phương thức
# Method overloading in Python class Wizard: def __init__[self, mana]: self.mana = mana def stupor[self, other, damage=50]: if self.mana>100: other.mana -= damage tom = Wizard[112] dumbledore = Wizard[151] # duell tom.stupor[dumbledore] dumbledore.stupor[tom, 200] for i in range[10]: tom.stupor[dumbledore] # Tom Mana: print[tom.mana] # Dumbledore Mana: print[dumbledore.mana]
Tập thể dục. Đầu ra của mã này là gì?
Trình hướng dẫn lớp định nghĩa một thuộc tính thể hiện 'mana'
đại diện cho mức năng lượng của thể hiện
-880 tương ứng. Nếu mức mana cạn kiệt, họ không thể thực hiện các trò ảo thuật nữa
101
Trò ảo thuật sững sờ làm giảm mức năng lượng của đối thủ [được gọi là khác] nếu đối tượng được gọi còn đủ năng lượng
Bạn có thể gọi phương thức với hai cài đặt tham số thay thế. Đầu tiên, bạn có thể gọi nó chỉ bằng cách tham chiếu đến phiên bản trình hướng dẫn khác. Thứ hai, bạn có thể gọi nó bằng cách chỉ định cả tham chiếu đến trình hướng dẫn khác VÀ thiệt hại mà nó gây ra
Bằng cách này, bạn “quá tải” định nghĩa của phương thức. Nó thực hiện những thứ khác nhau khi được gọi khác nhau
Điều này được thể hiện trong đầu ra của câu đố. Giả sử, Pháp sư Tom chiến đấu chống lại Pháp sư Dumbledore. Tom tấn công đầu tiên. Anh ta giảm mức năng lượng đi 50 điểm ["sát thương" mặc định khi không được xác định rõ ràng]. Cụ Dumbledore đánh trả bằng cách giảm 200 điểm năng lượng của Tom trong một đòn đánh. Tại thời điểm này, Tom còn lại -88 mana, vì vậy cho dù anh ta có cố gắng làm hại cụ Dumbledore bao nhiêu lần đi chăng nữa - điều đó cũng không thay đổi được gì
Đây là kết quả của câu đố mã
-88
101
Ghi đè phương thức
Ghi đè phương thức. ghi đè chức năng của một phương thức được định nghĩa trong lớp cha
Đây là một ví dụ về ghi đè phương thức
# Method overriding in Python class Muggle: def convince[self, other, thing]: print["Please, " + other + ", " + thing] class Wizard[Muggle]: def convince[self, other, thing]: print["Imperius {" + other + ", " + thing + "}"] petunia = Muggle[] harry = Wizard[] petunia.convince["Harry", "clean up"] harry.convince["Dudley", "clean up"]
Tập thể dục. Đầu ra của câu đố mã này là gì?
Chúng tôi sử dụng một ví dụ về Harry Potter. Lớp
-881 là lớp cha của lớp
101
-880 [được biểu thị bằng định nghĩa lớp Wizard
101
-880]
101
Do đó, lớp
-880 kế thừa tất cả các phương thức và thuộc tính từ lớp cha
101
-881 — bao gồm cả phương thức
101
-883
101
Tuy nhiên, một
-880 có những cách khác để thuyết phục ai đó làm điều gì đó. Do đó, chúng ta OVERRIDE phương thức
101
-885 trong lớp con. Về bản chất, chúng tôi thay thế chức năng bằng chức năng mới cụ thể hơn cho lớp con
101
Khi Thuật sĩ Harry thực thi phương thức thuyết phục, nó sử dụng chức năng của phương thức được xác định trong mô tả lớp Thuật sĩ
Please, Harry, clean up
Imperius {Dudley, clean up}
Đi đâu từ đây?
Bạn cần biết từ vựng của một ngôn ngữ tự nhiên để giao tiếp với người khác. Tương tự, bạn cần biết cú pháp ngôn ngữ lập trình trước khi có thể giao tiếp hiệu quả với máy tính của mình và các lập trình viên khác.
Tham gia cùng 55.235 lập trình viên đầy tham vọng trong danh sách email của tôi — và học từ vựng Python từ đầu
Chris
Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính
Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới
Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây