Chức năng Python Super [] cho phép chúng tôi tham khảo lớp cha một cách rõ ràng. Nó rất hữu ích trong trường hợp kế thừa nơi chúng tôi muốn gọi các chức năng siêu lớp.
Python Super
Để hiểu về chức năng Super Python, bạn phải biết về kế thừa Python. Trong kế thừa Python, các lớp con được thừa hưởng từ siêu lớp. Chức năng Python Super [] cho phép chúng tôi giới thiệu siêu lớp ngầm. Vì vậy, Python Super làm cho nhiệm vụ của chúng tôi dễ dàng và thoải mái hơn. Trong khi giới thiệu siêu lớp từ lớp con, chúng tôi không cần phải viết tên của siêu lớp rõ ràng. Trong các phần sau, chúng tôi sẽ thảo luận về chức năng Super Python.
Ví dụ về chức năng siêu Python
Lúc đầu, chỉ cần nhìn vào mã sau đây chúng tôi đã sử dụng trong hướng dẫn kế thừa Python của chúng tôi. Trong mã ví dụ đó, siêu lớp là Person
và lớp con là Student
. Vì vậy, mã được hiển thị dưới đây.
class Person:
# initializing the variables
name = ""
age = 0
# defining constructor
def __init__[self, person_name, person_age]:
self.name = person_name
self.age = person_age
# defining class methods
def show_name[self]:
print[self.name]
def show_age[self]:
print[self.age]
# definition of subclass starts here
class Student[Person]:
studentId = ""
def __init__[self, student_name, student_age, student_id]:
Person.__init__[self, student_name, student_age]
self.studentId = student_id
def get_id[self]:
return self.studentId # returns the value of student id
# end of subclass definition
# Create an object of the superclass
person1 = Person["Richard", 23]
# call member methods of the objects
person1.show_age[]
# Create an object of the subclass
student1 = Student["Max", 22, "102"]
print[student1.get_id[]]
student1.show_name[]
Trong ví dụ trên, chúng tôi đã gọi chức năng lớp cha là:
Person.__init__[self, student_name, student_age]
Chúng ta có thể thay thế điều này bằng cuộc gọi chức năng Super Python như dưới đây.
super[].__init__[student_name, student_age]
Đầu ra sẽ vẫn giữ nguyên trong cả hai trường hợp, như thể hiện trong hình ảnh dưới đây.
Python 3 Super
Lưu ý rằng cú pháp trên là cho chức năng siêu Python 3. Nếu bạn đang sử dụng các phiên bản Python 2.x, thì nó hơi khác nhau và bạn sẽ phải thực hiện các thay đổi sau:
class Person[object]:
...
super[Student, self].__init__[student_name, student_age]
Thay đổi đầu tiên là có object
là lớp cơ sở cho người. Nó bắt buộc phải sử dụng chức năng siêu trong các phiên bản Python 2.x. Nếu không, bạn sẽ nhận được lỗi sau.
Traceback [most recent call last]:
File "super_example.py", line 40, in
student1 = Student["Max", 22, "102"]
File "super_example.py", line 25, in __init__
super[Student, self].__init__[student_name, student_age]
TypeError: must be type, not classobj
Thay đổi thứ hai trong cú pháp của chính hàm siêu. Như bạn có thể thấy rằng chức năng Super Python 3 dễ sử dụng hơn rất nhiều và cú pháp cũng trông sạch sẽ.
Chức năng siêu của Python với Di sản đa cấp
Như chúng tôi đã nói trước đây rằng hàm python [] cho phép chúng tôi giới thiệu siêu lớp ngầm. Nhưng trong trường hợp thừa kế đa cấp, nó sẽ đề cập đến lớp nào? Chà, Python Super [] sẽ luôn đề cập đến siêu lớp ngay lập tức. Ngoài ra hàm python siêu [] không chỉ có thể tham khảo hàm
Person.__init__[self, student_name, student_age]
0 mà còn có thể gọi tất cả các hàm khác của siêu lớp. Vì vậy, trong ví dụ sau, chúng ta sẽ thấy điều đó.class A:
def __init__[self]:
print['Initializing: class A']
def sub_method[self, b]:
print['Printing from class A:', b]
class B[A]:
def __init__[self]:
print['Initializing: class B']
super[].__init__[]
def sub_method[self, b]:
print['Printing from class B:', b]
super[].sub_method[b + 1]
class C[B]:
def __init__[self]:
print['Initializing: class C']
super[].__init__[]
def sub_method[self, b]:
print['Printing from class C:', b]
super[].sub_method[b + 1]
if __name__ == '__main__':
c = C[]
c.sub_method[1]
Hãy cùng xem đầu ra của ví dụ siêu 3 trên Python 3 với kế thừa đa cấp.
Initializing: class C
Initializing: class B
Initializing: class A
Printing from class C: 1
Printing from class B: 2
Printing from class A: 3
Vì vậy, từ đầu ra, chúng ta có thể thấy rõ rằng hàm
Person.__init__[self, student_name, student_age]
0 của lớp C lúc đầu, sau đó lớp B và sau lớp A. Điều tương tự đã xảy ra bằng cách gọi hàm Person.__init__[self, student_name, student_age]
2.Tại sao chúng ta cần chức năng Super Python
Nếu bạn có kinh nghiệm trước đây trong ngôn ngữ Java, thì bạn nên biết rằng lớp cơ sở cũng được gọi bởi một đối tượng siêu ở đó. Vì vậy, khái niệm này thực sự hữu ích cho các lập trình viên. Tuy nhiên, Python cũng giữ cơ sở cho lập trình viên sử dụng tên siêu lớp để giới thiệu chúng. Và, nếu chương trình của bạn chứa kế thừa đa cấp, thì hàm Super [] này rất hữu ích cho bạn. Vì vậy, đó là tất cả về chức năng Super Python. Hy vọng, bạn đã hiểu chủ đề này. Vui lòng sử dụng hộp bình luận cho bất kỳ truy vấn.super object there. So, this concept is actually useful for the coders. However, Python also keeps the facility for the programmer to use superclass name to refer them. And, if your program contains multi-level inheritance, then this super[] function is helpful for you. So, that’s all about python super function. Hopefully, you understood this topic. Please use the comment box for any query.
Bạn có thể kiểm tra toàn bộ tập lệnh Python và nhiều ví dụ về Python từ Kho lưu trữ GitHub của chúng tôi.
Tham khảo: Tài liệu chính thức