Kế thừa class trong Python (P1)

583
12-10-2021

Kế thừa class trong Python (P1)

I, Giới thiệu

Class cùng với object là những thành phần lõi của Python. Class cung cấp một cách tổ chức các attributes(data) và methods (behaviors). Một khái niệm vô cùng quan trọng của OOP(Object Oriented Programming) là class inheritance (dịch đại ý là kế thừa class). Class inheritance cho phép chúng ta tạo ra một class "thừa kế" (inherit) mọi tính năng của một hay nhiều parent class, chỉnh sửa các tính năng đó và đồng thời thêm các methods, attributes. Trong bài viết này, mình cùng các bạn khám phá khái niệm này trong Python.

II, Cách kế thừa một class

Cú pháp để kế thừa một class làm parent class như sau:

class Parent: pass class Child(Parent): pass
class Parent:
  pass
class Child(Parent):
  pass

Các parent class(es) được định nghĩa trong () sau tên của child class.

Để kiểm tra parent class(es) của một Để kiểm tra parent class(es) của một class là gì, chúng ta dùng cú pháp .__bases__ . Câu lệnh sẽ trả về một tuple chứa các parent class(es) của . Đối với class Child ở trên, cú pháp trên sẽ trả về:

(object,)

Oh vậy object chính là parent của parents. Vì Python là một ngôn ngữ OO(Object Oriented) nên mọi thứ trong Python đều là object ngoại trừ control flow. Và object là base classes của mọi objects trong Python. Một ví dụ để thấy điều này đó là:

In [1]: int.__bases__ Out[1]: (object,)

III. Các cách mở rộng class thông qua kế thừa

Đây là parent class chúng ta sẽ dùng trong ba phần phía dưới:

class Animal: def __init__(self, age, gender): self.age = age self.gender = gender

1. Thêm method(s) mới:

class Dog(Animal): def bark(self): print("Woof Woof") misa = Dog(1, 'gay') misa.bark()

Output sẽ là:

Woof Woof

2. Định nghĩa lại, chỉnh sửa method(s) có sẵn của parent class(es)

class Chihuahua(Dog): def bark(self): print('Yab Yab') mic = Chihuahua(2, 'male') mic.bark()

Output sẽ là:

Yab Yab

3. Thêm attribute(s) mới

class Bear(Animal): def __init__(self, age, gender, fur_color): super().__init__(age, gender) self.fur_color = fur_color

Khái niệm super() mình sẽ giải thích ở sau. Các bạn có thể hiểu super() trong context hiện tại là để gọi phiên bản trước — tức là class Animal. Ở ví dụ trên, đó là truyền vào init của class Animal hai attributes đó là age, gender như định nghĩa của nó.

polar_bear = Bear(1, 'male', 'white') # __dict__ trả về một dictionary chứa instance data của instance polar_bear.__dict__

Output:

{'age': 1, 'gender': 'male', 'fur_color': 'white'}

Như các bạn thấy polar_bar có đầy đủ hai attributes của Animal đó là age, gender, và attribute fur_color mới được thêm vào class Bear

IV. Quan hệ giữa các child và parent classes

Sự "thừa kế" giữa child và base class(es) sẽ tạo ra một quan hệ "huyết thống" giữa 2.

Ví dụ kiểm tra loại instance của polar_bear:

isinstance(polar_bear, Bear) True isinstance(polar_bear, Animal) True

Do đó, một đoạn code hoat động với instance của parent class thì nên hoạt động với instance của child class.

V. Kết luận

Trong phần này, mình đã đã giới thiệu các tính chất cơ bản của class - một tính năng lõi của Python. Mong bài này có thể giúp bạn bổ sung kiến thức và áp dụng được trong công việc. Trong phần sau, mình sẽ nói về các tính năng nâng cao hơn của class mà không phải Python developers lâu năm nào cũng nắm rõ. Rất mong được sự đón xem của các bạn!

SHARE