Hàm super() trong Python
Trong Python, hàm super() được sử dụng chính trong hai trường hợp:
- Giúp chúng ta tránh phải sử dụng tên class cơ sở một cách rõ ràng
- Xử lý Đa kế thừa
Ví dụ 1: Hàm super() với Kế thừa đơn
Trong trường hợp kế thừa đơn, hàm super() giúp chúng ta tham chiều tới class cơ sở.
Ví dụ:
class Mammal(object):
def __init__(self, mammalName):
print(mammalName, 'là động vật máu nóng.')
class Voi(Mammal):
def __init__(self):
print('Voi có 4 chân.')
super().__init__('Voi')
d1 = Voi()
Khi chạy chương trình, kết quả thu được là
Voi có 4 chân.
Voi là động vật máu nóng.
Ở đây, chúng ta gọi method __init__() của lớp Mammal (từ class Voi) bằng đoạn mã:
super().__init__('Voi')
thay vì sử dụng:
Mammal.__init__(self, 'Voi')
Vì chúng ta không cần sử dụng tên của class cơ sở khi gọi các đối tượng bên trong nó nên khi cần chúng ta có thể đổi tên class một cách dễ dàng.
Ví dụ đổi tên class Mammal:
# đổi tên class Mammal thành Elephantidae
class Voi(Elephantidae):
def __init__(self):
print('Voi có 4 chân.')
# chúng ta không cần thay đổi dòng code này
super().__init__('Voi')

Hàm super() trả về một đối tượng proxy, một dạng đối tượng thay thế có thể gọi các method của class cơ sở thông qua ủy quyền. Đây được gọi là phương thức gián tiếp (khả năng tham chiếu một đối tượng cơ sở với hàm super()).
Vì phương thức tham chiếu gián tiếp này chỉ được sử dụng trong thời gian chạy chương trình nên chúng ta có thể sử dụng các class cơ sở khác nhau vào các thời điểm khác nhau nếu cần.
Ví dụ 2: Hàm super() với Đa kế thừa
Chúng ta hãy cùng xem đoạn code sau:
class Animal:
def __init__(self, Animal):
print(Animal, 'là một loài động vật.');
class Mammal(Animal):
def __init__(self, mammalName):
print(mammalName, 'là động vật máu nóng.')
super().__init__(mammalName)
class NonWingedMammal(Mammal):
def __init__(self, NonWingedMammal):
print(NonWingedMammal, "không thể bay.")
super().__init__(NonWingedMammal)
class NonMarineMammal(Mammal):
def __init__(self, NonMarineMammal):
print(NonMarineMammal, "không thể bơi.")
super().__init__(NonMarineMammal)
class Voi(NonMarineMammal, NonWingedMammal):
def __init__(self):
print('Voi có 4 chân.');
super().__init__('Voi')
d = Voi()
print('')
bat = NonMarineMammal('Dơi')
Khi chạy chương trình, kết quả thu được là
Voi có 4 chân.
Voi không thể bơi.
Voi không thể bay.
Voi là động vật máu nóng.
Voi là một loài động vật.
Dơi không thể bơi.
Dơi là động vật máu nóng.
Dơi là một loài động vật.
Phương pháp giải quyết thứ tự (Method Resolution Order - MRO)
MRO là thứ tự các method được kế thừa khi có đa kế thừa. Bạn có thể xem MRO bằng cách sử dụng thuộc tính __mro__.
>>> Voi.__mro__
(<class 'Voi'>,
<class 'NonMarineMammal'>,
<class 'NonWingedMammal'>,
<class 'Mammal'>,
<class 'Animal'>,
<class 'object'>)
Đây là cách hoạt động của MRO
- Một method trong các lệnh dẫn xuất luôn được gọi trước method của class cơ sở. Trong ví dụ của chúng ta, class Voi được gọi trước NonMarineMammal hoặc NonWingedMammal. Hai class này lại được gọi trước class Mammal và Mammal lại được gọi trước Animal, cuối cùng mới đến đối tượng.
- Nếu có nhiều class cha mẹ như Voi(NonMarineMammal, NonWingedMammal), các method của NonMarineMammal sẽ được gọi trước tiên vì nó xuất hiện đầu tiên.
Để tìm hiểu thêm về các hàm trong Python, mời các bạn truy cập trang web dưới đây:
Bạn nên đọc
-
Lệnh break và continue trong Python
-
Hàm property() trong Python
-
Hàm setattr() trong Python
-
Cách tính diện tích hình vuông trong Python
-
Hàm max() trong Python
-
Lập trình hướng đối tượng trong Python
-
Regular Expression (RegEx) trong Python
-
Hàm sorted() trong Python
-
Cách viết lệnh, thụt lề và chú thích trong Python
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:


Cũ vẫn chất
-
Top 9 phần mềm giả lập PC trên Android
Hôm qua -
Cách xóa và gỡ cài đặt hoàn toàn ứng dụng trên Android
Hôm qua -
6 cách kiểm tra số dư tài khoản Agribank nhanh chóng, chính xác
Hôm qua -
Chuyển từ cơ số 2 sang cơ số 16
Hôm qua -
Hướng dẫn tải nhạc trên Tik Tok nhanh chóng, đơn giản
Hôm qua -
Huyền Thoại Hải Tặc - Hải Tặc Đại Chiến
-
Code Skibidi Tower Defense mới nhất và cách đổi code lấy thưởng
Hôm qua -
Cách khôi phục bài viết đã ẩn trên Facebook bằng điện thoại, máy tính
Hôm qua 1 -
Quên mật khẩu Wifi đã lưu? Đây là cách xem mật khẩu Wifi trên máy tính
Hôm qua 1 -
Cách tải Liên Minh Tốc Chiến cho iOS và Android
Hôm qua 6