Siêu trong Python 3 là gì?

Trăn 2. 2 chứng kiến ​​sự ra đời của một hàm tích hợp có tên là “siêu”, trả về một đối tượng proxy để ủy quyền các lệnh gọi phương thức cho một lớp – về bản chất có thể là lớp cha hoặc lớp anh chị em

Mô tả đó có thể không có ý nghĩa trừ khi bạn có kinh nghiệm làm việc với Python, vì vậy chúng tôi sẽ chia nhỏ nó

Về cơ bản, hàm siêu có thể được sử dụng để truy cập vào các phương thức kế thừa – từ lớp cha hoặc lớp anh chị em – đã bị ghi đè trong một đối tượng lớp

Hoặc, như

“[Super được sử dụng để] trả về một đối tượng proxy ủy quyền các lệnh gọi phương thức cho lớp cha hoặc lớp anh chị em của loại. Điều này rất hữu ích để truy cập các phương thức kế thừa đã bị ghi đè trong một lớp. Thứ tự tìm kiếm giống như thứ tự được sử dụng bởi getattr[] ngoại trừ bản thân loại bị bỏ qua. ”

Chức Năng Siêu Cấp Được Sử Dụng Như Thế Nào?

Siêu chức năng hơi linh hoạt và có thể được sử dụng theo một số cách

Trường hợp sử dụng 1. Super có thể được gọi trong một kế thừa duy nhất, để tham chiếu đến lớp cha hoặc nhiều lớp mà không cần đặt tên rõ ràng cho chúng. Đó là một phần của lối tắt, nhưng quan trọng hơn, nó giúp duy trì mã của bạn trong tương lai gần

Trường hợp sử dụng 2. Super có thể được gọi trong môi trường thực thi năng động cho nhiều kế thừa hoặc cộng tác. Việc sử dụng này được coi là dành riêng cho Python, vì không thể thực hiện được với các ngôn ngữ chỉ hỗ trợ kế thừa đơn lẻ hoặc được biên dịch tĩnh

Khi siêu chức năng được giới thiệu, nó đã gây ra một chút tranh cãi. Nhiều nhà phát triển nhận thấy tài liệu không rõ ràng và bản thân chức năng này khó thực hiện. Nó thậm chí còn bị mang tiếng là có hại. Nhưng điều quan trọng cần nhớ là Python đã phát triển đáng kể kể từ 2. 2 và nhiều mối quan tâm trong số này không còn áp dụng

Điều tuyệt vời về super là nó có thể được sử dụng để nâng cao bất kỳ phương pháp mô-đun nào. Ngoài ra, không cần biết chi tiết về lớp cơ sở đang được sử dụng như một bộ mở rộng. Siêu chức năng xử lý tất cả cho bạn

Vì vậy, đối với tất cả ý định và mục đích, super là lối tắt để truy cập lớp cơ sở mà không cần biết loại hoặc tên của nó

Trong Python 3 trở lên, cú pháp của super là

super[].methoName[args]

Trong khi cách thông thường để gọi super [trong các bản Python cũ hơn] là

super[subClass, instance].method[args]

Như bạn có thể thấy, phiên bản Python mới hơn giúp cú pháp đơn giản hơn một chút

Cách gọi Super trong Python 2 và Python 3?

Đầu tiên, chúng ta sẽ lấy một định nghĩa lớp thông thường và sửa đổi nó bằng cách thêm siêu hàm. Mã ban đầu sẽ trông giống như thế này

class MyParentClass[object]:
def __init__[self]:
pass

class SubClass[MyParentClass]:
def __init__[self]:
MyParentClass.__init__[self]

Như bạn có thể thấy, đây là một thiết lập thường được sử dụng cho kế thừa đơn lẻ. Chúng ta có thể thấy rằng có một lớp cơ sở hoặc lớp cha [đôi khi còn được gọi là siêu lớp] và một lớp con được biểu thị

Nhưng chúng ta vẫn cần khởi tạo lớp cha bên trong lớp con. Để làm cho quá trình này dễ dàng hơn, nhóm phát triển cốt lõi của Python đã tạo ra siêu chức năng. Mục tiêu là cung cấp một giải pháp trừu tượng và di động hơn nhiều để khởi tạo các lớp

Nếu chúng ta đang sử dụng Python 2, chúng ta sẽ viết lớp con như thế này [sử dụng hàm super]

class SubClass[MyParentClass]:
def __init__[self]:
super[SubClass, self].__init__[]

Tuy nhiên, mã tương tự hơi khác một chút khi viết bằng Python 3

class MyParentClass[]:
def __init__[self]:
pass

class SubClass[MyParentClass]:
def __init__[self]:
super[]

Lưu ý cách lớp cha không trực tiếp dựa trên lớp cơ sở đối tượng nữa? . Bạn không đồng ý điều này là dễ dàng hơn nhiều?

Bây giờ, hãy nhớ rằng hầu hết các lớp cũng sẽ có các đối số được truyền cho chúng. Siêu chức năng sẽ còn thay đổi nhiều hơn khi điều đó xảy ra

Nó sẽ giống như sau

class MyParentClass[]:
def __init__[self, x, y]:
pass

class SubClass[MyParentClass]:
def __init__[self, x, y]:
super[].__init__[x, y]

Một lần nữa, quá trình này đơn giản hơn nhiều so với phương pháp truyền thống. Trong trường hợp này, chúng ta phải gọi phương thức __init__ của siêu hàm để truyền các đối số của chúng ta

Siêu chức năng cho một lần nữa là gì?

Siêu chức năng cực kỳ hữu ích khi bạn lo lắng về khả năng tương thích chuyển tiếp. Bằng cách thêm nó vào mã của bạn, bạn có thể đảm bảo rằng công việc của mình sẽ tiếp tục hoạt động trong tương lai chỉ với một vài thay đổi trên bảng

Cuối cùng, nó loại bỏ nhu cầu khai báo một số đặc điểm của một lớp, miễn là bạn sử dụng nó đúng cách

Để sử dụng chức năng đúng cách, các điều kiện sau phải được đáp ứng

  • Phương thức được gọi bởi super[] phải tồn tại
  • Cả hàm caller và callee đều cần phải có chữ ký đối số phù hợp
  • Mỗi lần xuất hiện của phương thức phải bao gồm super[] sau khi bạn sử dụng nó

Bạn có thể bắt đầu với một lớp kế thừa duy nhất, nhưng sau đó, nếu bạn quyết định thêm một lớp cơ sở khác – hoặc nhiều hơn nữa – thì quá trình này sẽ diễn ra suôn sẻ hơn rất nhiều. Bạn chỉ cần thực hiện một vài thay đổi thay vì rất nhiều

Đã có cuộc nói chuyện về việc sử dụng siêu chức năng để tiêm phụ thuộc, nhưng chúng tôi chưa thấy bất kỳ ví dụ chắc chắn nào về điều này – ít nhất là không thực tế. Hiện tại, chúng tôi sẽ gắn bó với mô tả mà chúng tôi đã đưa ra

Dù bằng cách nào, bây giờ bạn sẽ hiểu rằng siêu phẩm không tệ như các nhà phát triển khác cho rằng nó là như vậy

Tìm hiểu thêm về chức năng siêu

Chúng ta biết rất nhiều về siêu hàm và ngôn ngữ Python nói chung, nhưng chúng ta không biết mọi thứ. Có rất nhiều nơi khác bạn có thể đến để tìm hiểu thêm

Các trang web chúng tôi khuyên bạn nên kiểm tra là

Raymond Hettinger's Exploration of Super and Python

Cách sử dụng siêu hiệu quả – Python Phiên bản 2. 7 công thức

Học Python một cách khó khăn – Bài tập 44. Kế thừa so với thành phần

Trăn 2. Thứ tự giải quyết 3 phương pháp

Sáu Mươi Bắc. Siêu phẩm của Python không đơn giản như bạn nghĩ

Có liên quan

Đào tạo Python được đề xuất

Khóa học. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản

Super[] hoạt động như thế nào trong Python?

Hàm super[] trong Python giúp kế thừa lớp dễ quản lý và mở rộng hơn. Hàm trả về một đối tượng tạm thời cho phép tham chiếu đến lớp cha bằng từ khóa super . Hàm super[] có hai trường hợp sử dụng chính. Để tránh việc sử dụng lớp super [parent] một cách rõ ràng.

super[] dùng để làm gì?

Nó được sử dụng để gọi các phương thức của lớp bậc trên và để truy cập hàm tạo của lớp bậc trên . Cách sử dụng phổ biến nhất của từ khóa super là để loại bỏ sự nhầm lẫn giữa các lớp cha và lớp con có các phương thức có cùng tên.

Siêu [] có cần thiết Python không?

Nói chung là cần thiết . Và nó thường là lệnh gọi đầu tiên trong init của bạn. Đầu tiên nó gọi hàm init của lớp cha [ dict ].

super[] trả về cái gì?

Giá trị trả về của super[] trong Python

Chủ Đề