hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
      • NodeJS
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
      • MongoDB
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
      • Spring Boot
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Lập trình Python
    • Git và Github
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
    • Mạng và truyền thông
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình Python
Python bài 14: Đóng gói, property, kế thừa và đa hình

Python bài 14: Đóng gói, property, kế thừa và đa hình

  • 18-10-2026
  • Toanngo92
  • 0 Comments

Giáo trình Python miễn phí · Chương 7/12: Lập trình hướng đối tượng · Bài 14/24.

← Bài 13 · Mục lục 12 chương · Bài 15 →

Mục lục

  • Mục tiêu bài học
  • Đóng gói bằng giao diện rõ ràng
  • Kế thừa và super()
  • Đa hình và giao thức hành vi
  • Lỗi thường gặp và lưu ý
  • Ghi nhớ
  • Tài liệu đối chiếu

Mục tiêu bài học

Kiểm soát dữ liệu qua property, mở rộng hành vi bằng kế thừa và hiểu đa hình theo cách Python.

Đóng gói bằng giao diện rõ ràng

Đóng gói không chỉ là đặt dấu gạch dưới trước tên. Mục tiêu là cho phần còn lại của chương trình một cách dùng ổn định và giữ trạng thái hợp lệ. Quy ước _ten cho biết thuộc tính thuộc nội bộ; __ten có cơ chế name mangling nhằm tránh đụng tên ở lớp con, không phải bảo mật tuyệt đối.

property cho phép dùng cú pháp thuộc tính trong khi vẫn kiểm tra khi gán. Setter cần xử lý quy tắc và lưu vào tên nội bộ khác; nếu tự gán lại property đó bên trong setter sẽ tạo đệ quy vô hạn.

class SanPham:
    def __init__(self, ten, gia):
        self.ten = ten
        self.gia = gia

    @property
    def gia(self):
        return self._gia

    @gia.setter
    def gia(self, gia_tri):
        if gia_tri < 0:
            raise ValueError("Giá không được âm")
        self._gia = gia_tri

    def __str__(self):
        return f"{self.ten}: {self.gia:,} đồng"

sp = SanPham("Sách Python", 120000)
sp.gia = 135000
print(sp)

Kết quả:

Sách Python: 135,000 đồng

Kế thừa và super()

Kế thừa phù hợp khi lớp con có thể được dùng như một dạng của lớp cha. Lớp con có thể bổ sung trạng thái và ghi đè phương thức. super() gọi theo thứ tự phân giải phương thức, giúp phối hợp hành vi kế thừa; với kế thừa đơn có thể hình dung là tiếp tục đến lớp cha.

Không dùng kế thừa chỉ để tiết kiệm vài dòng. Nếu một đối tượng chỉ cần sử dụng một thành phần khác, composition thường hợp lý hơn: lớp DonHang chứa danh sách SanPham thay vì kế thừa SanPham.

from abc import ABC, abstractmethod

class ThongBao(ABC):
    @abstractmethod
    def noi_dung(self):
        pass

class Email(ThongBao):
    def noi_dung(self):
        return "Gửi email xác nhận"

class TinNhan(ThongBao):
    def noi_dung(self):
        return "Gửi tin nhắn xác nhận"

for kenh in [Email(), TinNhan()]:
    print(kenh.noi_dung())

Kết quả:

Gửi email xác nhận
Gửi tin nhắn xác nhận

Đa hình và giao thức hành vi

Cùng lời gọi noi_dung() có kết quả tùy đối tượng nhận lời gọi. Đây là đa hình ở thời điểm chạy. Python còn dùng duck typing: quan tâm đối tượng đáp ứng hành vi cần thiết, không bắt buộc mọi tình huống đều có cùng lớp cha. ABC hữu ích khi muốn mô tả giao diện và ngăn khởi tạo lớp còn thiếu phương thức trừu tượng.

Việc viết hai phương thức cùng tên trong một lớp không tạo overload theo kiểu tham số như một số ngôn ngữ khác; định nghĩa sau ghi đè định nghĩa trước. Dùng tham số mặc định hoặc thiết kế hàm rõ ràng để xử lý các cách gọi khác nhau.

Lỗi thường gặp và lưu ý

  • Name mangling không che giấu được dữ liệu khỏi người có quyền chạy chương trình.
  • Không kế thừa sâu khi chỉ cần vài thành phần kết hợp; ưu tiên mô hình dễ đọc và dễ thay thế.

Ghi nhớ

Property duy trì trạng thái hợp lệ; kế thừa mở rộng một quan hệ phù hợp; đa hình giúp cùng đoạn điều phối làm việc với nhiều cách triển khai.

Tài liệu đối chiếu

  • Lớp và kế thừa

← Bài 13 · Mục lục 12 chương · Bài 15 →

Bài viết liên quan:

Giáo trình Python: mục lục 12 chương, 24 bài từ cơ bản đến ứng dụng
Python bài 24: Lock, Queue và thiết kế worker an toàn
Python bài 23: Thread, start, join và concurrency
Python bài 22: Kết nối MySQL và CRUD có transaction
Python bài 21: Gọi HTTP API, xử lý JSON và tải dữ liệu
Python bài 20: Serialization với JSON và pickle
Python bài 19: Đọc ghi tệp, pathlib, UTF-8 và CSV
Python bài 18: Closure, decorator và functools.wraps
Python bài 17: Iterable, iterator, generator và yield
Python bài 16: Type hints, logging và kiểm thử chương trình
Python bài 15: Ngoại lệ, traceback và kỹ năng debug
Python bài 13: Class, object, thuộc tính và các loại phương thức

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Hạ tầng mạng máy tính: router, switch, Wi-Fi và TCP/IP

Mạng máy tính bài 04: TCP, UDP, port và socket: Dữ liệu đến đúng ứng dụng thế nào?

Hạ tầng mạng máy tính: router, switch, Wi-Fi và TCP/IP

Mạng máy tính bài 03: Biểu diễn dữ liệu, mật mã hóa và phiên làm việc trên web

Hạ tầng mạng máy tính: router, switch, Wi-Fi và TCP/IP

Mạng máy tính bài 05: Địa chỉ IP, subnet và router: Máy tính tìm đường tới đích thế nào?

Hạ tầng mạng máy tính: router, switch, Wi-Fi và TCP/IP

Mạng máy tính bài 02: OSI và TCP/IP: Điều gì xảy ra khi bạn mở một website?

Hạ tầng mạng máy tính: router, switch, Wi-Fi và TCP/IP

Mạng máy tính bài 01: Mạng máy tính là gì? Từ Wi-Fi gia đình đến Internet

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×