Không. Python có thể tốt hơn nhiều ngôn ngữ ở nhiều khía cạnh nhưng nó không thể làm được điều kỳ diệu. Các phương thức ma thuật trong Python là những phương thức có hai dấu gạch dưới ở mỗi bên của tên. Một ví dụ về các phương thức ma thuật Python là __init__[]
Các phương thức ma thuật được phát âm là dunder method_name dunder, đây là lý do các phương thức ma thuật đôi khi được gọi là các phương thức dunder
Nhưng những phương pháp này có gì đặc biệt?
Nạp chồng toán tử là gì? . Ví dụ: toán tử '+' có thể cộng hai số hoặc nối hai chuỗi với nhau
Lý do tại sao '+' có thể thêm nhiều hơn một chuỗi là do các phương thức kỳ diệu này. Các phương thức kỳ diệu là lý do tại sao Python là một ngôn ngữ mạnh mẽ như vậy
Lưu ý Mọi thứ trong Python đều là đối tượng. Một đối tượng là một mục dữ liệu cho Python. × Bỏ qua cảnh báo
Phương pháp Magic hoặc Dunder quan trọng
Hãy cố gắng hiểu các phương pháp ma thuật quan trọng
__mới__[cls, đối số]
Khi một đối tượng được khởi tạo, đây là phương thức đầu tiên được gọi. Điều này không được sử dụng nhiều trong Python. Nó rất hữu ích khi bạn muốn phân lớp một loại bất biến như bộ hoặc chuỗi
__new__ được gọi khi một đối tượng mới được tạo. Phương thức __init__ sau đó khởi tạo đối tượng đó
Phương thức __new__ lấy tên lớp và bất kỳ đối số nào mà người dùng đã truyền và sau đó gửi nó đến phương thức __init__
cú pháp
lớp Tên_của_lớp
def __new__[cls, *args, **kwargs].
ma cua ban
trả lại siêu [tên_of_class, cls]. __new__[cls, *args, **kwargs]
Phương thức super[] trả về các tham số name_of_class, đối tượng cls [một con trỏ tới lớp], các câu lệnh mã của bạn và các đối số
Lưu ý Nếu cả __new__ và __init__ đều có trong mã lớp của bạn, thì bạn cũng có thể chọn thực thi phương thức __init__ của một lớp khác. Ngoài ra, bạn có thể chỉ cần bỏ qua phương thức __init__ của lớp có phương thức __new__. × Bỏ qua cảnh báo
Hãy có một ví dụ để xem hoạt động của phương pháp dunder này
Ví dụ
Phương thức __init__ sẽ chỉ được thực thi nếu __new__ trả về thứ gì đó. Vì vậy, nếu bạn xóa hàm super[] khỏi đoạn mã trên, phương thức __init__ sẽ không in bất kỳ thứ gì
Lưu ý quan trọng Nếu bạn không chỉ định phương thức __new__ khi tạo lớp, Python sẽ vẫn thực thi phương thức __init__. × Bỏ qua cảnh báo
__init__[bản thân, lập luận]
Phương thức __init__[] hoạt động như một trình khởi tạo cho lớp. Điều này nhận được tất cả các đối số được truyền trong các tham số lớp. Nó được sử dụng phổ biến trong các lớp Python vì không có nó, một lớp sẽ không được khởi tạo
Trong Python, phương thức __init__ còn được gọi là hàm tạo vì nó luôn được thực thi khi đối tượng hóa một lớp. Mục đích chính của nó là khởi tạo các biến mà chúng ta muốn sử dụng với các chức năng khác
Hãy có một ví dụ về chức năng này
Ví dụ
Phương thức __init__ không thể trả về bất cứ thứ gì. Nếu bạn cố gắng làm điều đó, Python sẽ báo lỗi. Nhưng loại lỗi nào, hãy kiểm tra với ví dụ dưới đây
Ví dụ
Điều này là do mục đích của phương thức __init__ là thay đổi trạng thái của phiên bản mới. Nó không thể trả lại bất cứ thứ gì ngoại trừ Không
__repr__
Phương thức ma thuật __repr__ trong Python được sử dụng để biểu diễn một đối tượng trong lớp dưới dạng chuỗi. Và, giống như các phương thức dunder được sử dụng ở trên, bạn có thể điều chỉnh biểu diễn của một chuỗi theo lựa chọn của mình
Phương pháp này thường được sử dụng để gỡ lỗi mã. Hãy xem một ví dụ cho chức năng này
Ví dụ
Bạn có thể thêm một chuỗi vào đầu ra không?
Ví dụ
Như bạn có thể thấy, điều đó không hoạt động vì chúng thuộc các loại khác nhau. Để thêm chức năng này vào lớp của chúng ta, chúng ta sẽ sử dụng một phương thức kỳ diệu khác có tên __add__
__cộng__
Phương pháp kỳ diệu __add__ cho toán tử dấu cộng ‘+‘. Chúng ta có thể sử dụng phương thức này để thêm một chuỗi mới vào đối tượng loại New_class ở đầu ra
Để làm điều đó, chúng tôi sẽ sử dụng một ví dụ đơn giản hơn để tránh làm cho mã dài hơn
Ví dụ
Đối với các hoạt động toán học khác như trừ, chia, v.v. , có các phương thức ma thuật, ví dụ: __sub__, __div__, v.v.
__del__
Phương thức ma thuật __del__ là một phương thức hoàn thiện. Python tự động gọi nó khi trình thu gom rác của Python đang hoạt động
Rác trong Python được thu thập khi tất cả các tham chiếu đến đối tượng lớp đã bị xóa. Hay nói một cách đơn giản hơn, hàm này được gọi khi một hàm hoặc mã trong một lớp đã thực thi xong
Hãy có một ví dụ về hoạt động của chức năng này
Ví dụ
Khi chúng ta tạo một thể hiện của NewClass[] mà không gán nó cho một biến, trình thu gom rác của Python sẽ theo dõi nó
Sau đó, khi dòng mã cuối cùng, tôi. e. , câu lệnh in được thực thi, bộ thu gom rác của Python sẽ xóa hoàn toàn đối tượng NewClass[]
Lưu ý Điều tương tự cũng xảy ra khi bạn xóa một đối tượng bằng từ khóa del. Tuy nhiên, trong trường hợp đó, nó ngay lập tức. × Bỏ qua cảnh báo
Danh sách các phương pháp Magic/Dunder quan trọng khác
Phương pháp chuyển nhượng tăng cường
Magic MethodMethod Description__getattr__[self, name]Phương thức này được gọi khi bạn đang cố truy cập một thuộc tính không tồn tại của một lớp. __setattr__[self, name]Khi bạn gán một giá trị cho thuộc tính của một lớp, phương thức này sẽ được gọi. __delattr__[self, name]Được gọi khi xóa một thuộc tính của một lớp