Python dainganxanh
  • Lời nói đầu
  • Chương I. SƠ LƯỢC
    • Bài 1. Cài đặt môi trường
    • Bài 2. Từ khóa và định danh
    • Bài 3. Câu lệnh, khối lệnh và chú thích
    • Bài 4. Nhập, xuất dữ liệu
    • Bài 5. Toán tử và lệnh gán
    • Bài 6. Biến, Hằng
    • Bài 7. Kiểu dữ liệu
    • Bài 8. Thao tác với tệp (cơ bản)
    • Bài 9. Tổng quan về Python
    • Bài tập chương 1
  • Chương II. RẼ NHÁNH - LẶP
    • Bài 10. Cấu trúc rẽ nhánh if…else
    • Bài 11. Cấu trúc lặp với for
    • Bài 12. Cấu trúc lặp với while
    • Bài 13. Lệnh break và continue
    • Bài tập chương 2
  • Chương III. HÀM & MODULE
    • Bài 14. Hàm
    • Bài 15. Tham số hàm
    • Bài 16. Đệ quy
    • Bài 17. Hàm ẩn danh
    • Bài 18. Biến toàn cục và cục bộ
    • Bài 19. Module
    • Bài 20. Package
  • Chương IV. KIỂU DỮ LIỆU
    • Bài 21. Dữ liệu kiểu số
    • Bài 22. Dữ liệu kiểu string
    • Bài 23. Dữ liệu kiểu list
    • Bài 24. Dữ liệu kiểu tuple
    • Bài 25. Dữ liệu kiểu set
    • Bài 26. Dữ liệu kiểu dictionary
  • Chương V. TỆP & THƯ MỤC
    • Bài 27. Đọc và ghi file
    • Bài 28. Quản lý file và folder
  • Chương VI. LỖI & NGOẠI LỆ
    • Bài 29. Ngoại lệ
    • Bài 30. Xử lý ngoại lệ
    • Bài 31. Xây dựng ngoại lệ
  • Chương VII. HƯỚNG ĐỐI TƯỢNG
    • Bài 32. Lập trình hướng đối tượng
    • Bài 33. Đối tượng và Lớp
    • Bài 34. Kế thừa
    • Bài 35. Đa kế thừa
    • Bài 36. Nạp chồng toán tử
  • Chương VIII. NGÀY - GIỜ
    • Python datetime
    • Python strftime()
    • Python strptime()
    • Current date and time
    • Get Current time
    • Timestamp to datetime
    • Python time Module
    • Python sleep()
  • Chương IX. CHỦ ĐỀ NÂNG CAO
    • Python Iterators
    • Python Generators
    • Python Closures
    • Python Decorators
    • Python @property decorator
    • Python RegEx
    • Python Examples
  • PHỤ LỤC - GHI CHÉP
    • Hàm map()
    • Cài Sublime Text để code Python
    • Ghi chép - ghi chú
    • Mảng 2 chiều
    • Công thức với dãy số
  • Tài liệu tham khảo
  • www.dainganxanh.com
  • 🐍Khóa học Python
  • 🤷‍♀️Hỏi đáp, chia sẻ (FG)
  • 🎮Sinh Test chấm Themis
Powered by GitBook
On this page
  • Kế thừa trong Python (Inheritance)
  • Method Overriding in Python
  • Kiểm tra quan hệ 2 lớp

Was this helpful?

  1. Chương VII. HƯỚNG ĐỐI TƯỢNG

Bài 34. Kế thừa

Python Inheritance

Kế thừa trong Python (Inheritance)

Kế thừa là một tính năng mạnh mẽ trong lập trình hướng đối tượng.

Kế thừa (Inheritance) cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa. Lớp đã có gọi là lớp cha (base class hoặc parent class), lớp mới phát sinh gọi là lớp con (child class hoặc derived class). Lớp con kế thừa tất cả thành phần của lớp cha, có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới.

Cú pháp khai báo

class LopCha:
  # Các thành phần trong lớp cha
class LopCon(LopCha):
  # Các thành phần trong lớp con

Ví dụ về kế thừa trong Python

Xét ví dụ sau

class Dagiac:
    def __init__(self, socanh):
        self.n = socanh
        self.canh = [0 for i in range(socanh)]

    def nhapcanh(self):
        self.canh = [float(input(f"Nhập cạnh {i+1}: ")) for i in range(self.n)]

    def xemcanh(self):
        for i in range(self.n):
            #print("Cạnh",i+1,"là",self.canh[i])
            print(f'Cạnh {i+1} là {self.canh[i]}')
            
class Tamgiac(Dagiac):
    def __init__(self):
        Dagiac.__init__(self,3)

    def dientichTG(self):
        a, b, c = self.canh
        s = (a + b + c) / 2
        dt = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print(f'Diện tích của tam giác là {dt:.2f}')            

tg = Tamgiac()

tg.nhapcanh()

tg.xemcanh()

tg.dientichTG()
Nhập cạnh 1: 5
Nhập cạnh 2: 3
Nhập cạnh 3: 4

Cạnh 1 là 5.0
Cạnh 2 là 3.0
Cạnh 3 là 4.0
Diện tích của tam giác là 6.00

Ở lớp Dagiac có các thuộc tính gồm số cạnh và một list lưu độ dài mỗi cạnh. Các phương thức nhapcanh() và xemcanh() để nhập độ dài cạnh và hiển thị các cạnh đã nhập.

Ta xây dựng class Tamgiac thừa kế từ lớp Dagiac. Theo đó lớp Tamgiac thừa kế tất cả các thuộc tính, phương thức từ lớp cha là class Dagiac. Vì vậy, dùng lớp Tamgiac không có phương thức nhapcanh() và xemcanh() nhưng ta vẫn có thể gọi và sử dụng trong chương trình.

Method Overriding in Python

Ở ví dụ trên ta thấy phương thức __init__() được khai báo ở cả 2 class (Dagiac và Tamgiac). Trong trường hợp này phương thức __init__() của lớp con sẽ ghi đề phương thức cùng tên của lớp cha. Nghĩa là phương thức instructor của Tamgiac ghi đè lên instructor của Dagiac.

Thông thường, việc ghi đè chỉ được dùng khi ta cần định nghĩa lại hoặc khai báo mới trong con so với lớp cha. Trường hợp không có gì khác thì gọi phương thức từ lớp cha để kế thừa (dùng lệnh gọi Dagiac.__init__() trong __init__() của Tamgiac).

Cách tốt hơn và thường được dùng hơn khi gọi kế thừa __init__ từ lớp cha người ta dùng hàm có sẵn super(). Thay vì gọi Dagiac.__init__(self, 3) thì ta có thể gọisuper().__init__(3) .

Kiểm tra quan hệ 2 lớp

Hàm isinstance() và issubclass() được dùng để kiểm tra mối quan hệ của hai lớp và instance.

Hàm issubclass(A, B) trả về True nếu class A là lớp con của class B.

Hàm isinstance(a,B) trả về True nếu đối tượng a là một thể hiện (instance) của class B hoặc một class con của lớp B.

Ví dụ

# True
print(isinstance(tg,Tamgiac))
# True
print(isinstance(tg,Dagiac))
# True
print(issubclass(Tamgiac,Dagiac))
# False
print(issubclass(Dagiac,Tamgiac))
PreviousBài 33. Đối tượng và LớpNextBài 35. Đa kế thừa

Last updated 4 years ago

Was this helpful?