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
  • Khai báo một Class
  • Tạo đối tượng (Object)
  • Constructors
  • Xóa bỏ thuộc tính và đối tượng

Was this helpful?

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

Bài 33. Đối tượng và Lớp

Python Objects and Classes

Đối tượng (Object) chỉ đơn giản là một tập hợp các dữ liệu (các biến) và các phương thức (các hàm) hoạt động trên các dữ liệu đó. Và, lớp (class) là một kế hoạch chi tiết cho đối tượng.

Ta có thể hình dung class như một bản phác thảo (nguyên mẫu) của một ngôi nhà. Nó chứa tất cả các chi tiết về sàn nhà, cửa ra vào, cửa sổ,... Dựa trên những mô tả này, chúng ta sẽ xây (hoặc in 3D) các ngôi nhà và nhà ở đây chính là đối tượng.

Khai báo một Class

Cú pháp khai báo (định nghĩa) một Class như sau

class TenClass:
    '''Đây là docstring để ghi chú cho class'''
    # các câu lệnh trong thân class 

Một class tạo ra một không gian tên cục bộ (local namespace) mới nơi tất cả các thuộc tính của nó được định nghĩa. Các thuộc tính có thể là dữ liệu hoặc hàm.

Ngoài ra còn có các thuộc tính đặc biệt được bắt đầu bằng dấu gạch dưới kép __. Ví dụ: __doc__ cung cấp cho chúng ta docstring của class.

Ngay sau khi chúng ta định nghĩa một Class, một đối tượng lớp mới có cùng tên cũng được tạo. Đối tượng lớp này cho phép chúng ta truy cập các thuộc tính khác nhau cũng như khởi tạo các đối tượng mới của lớp đó.

class Hocsinh:
    "Đây là một class có tên là Hocsinh"
    tuoi = 10

    def chao(self):
        print('Xin chào!')


# Output: 10
print(Hocsinh.tuoi)

# Output: <function Hocsinh.chao>
print(Hocsinh.chao)

# Output: 'Đây là một class có tên là Hocsinh'
print(Hocsinh.__doc__)

Tạo đối tượng (Object)

Đối tượng trong class có thể được sử dụng để truy cập các thuộc tính khác nhau và tạo các instance mới của lớp đó. Thủ tục để tạo một đối tượng tương tự như cách chúng ta gọi hàm.

hs = Hocsinh()

Thao tác trên sẽ tạo một đối tượng mới có tên là hs. Chúng ta có thể truy cập các thuộc tính của đối tượng bằng tiền tố tên đối tượng.

Các thuộc tính có thể là dữ liệu hoặc phương thức. Các phương thức của một đối tượng là các hàm tương ứng của lớp đó.

Xem ví dụ sau:

class Hocsinh:
    tuoi = 10

    def chao(self):
        print('Xin chào!')


# Tạo một đối tượng mới theo class Hocsinh
hs = Hocsinh()

# Output: <function Hocsinh.chao at ... >
print(Hocsinh.chao)

# Output: <bound method Hocsinh.chao of <__main__.Hocsinh object at ...>>
print(hs.chao)

# Gọi phương thức chao()
# Output: Xin chào!
hs.chao()

Output

<function Hocsinh.chao at 0x00000133B8A57EE0>
<bound method Hocsinh.chao of <__main__.Hocsinh object at 0x00000133B8A45FD0>>
Xin chào!

Tham số self của hàm trong class là tham số mặc định ngầm gán bởi chính đối tượng mỗi khi đối tượng được gọi. Việc gọi phương thức chao() thông qua đối tượng hs.chao() tương đương với gọi phương thức chao() từ Class Hocsinh.chao(hs).

Constructors

Hàm trong Class được bắt đầu với dấu gạch dưới kép __ là các hàm đặc biệt, mang các ý nghĩa đặc biệt. Một trong đó là hàm __init__(). Hàm này được gọi bất cứ khi nào khởi tạo một đối tượng, một biến mới trong class và được gọi là constructor trong lập trình hướng đối tượng.

class SoPhuc:

    def __init__(self, r=0, i=0):
        self.thuc = r
        self.ao = i

    def hienthi(self):
        print(f'{self.thuc}+{self.ao}j')


# Tạo đối tượng 
num1 = SoPhuc(2, 3)

# Gọi phương thức hienthi()
# Output: 2+3j
num1.hienthi()

# Tạo đối tượng SoPhuc khác
# thêm thuộc tính 'attr'
num2 = SoPhuc(5)
num2.attr = 10

# Output: (5, 0, 10)
print((num2.thuc, num2.ao, num2.attr))

# thuộc tính 'attr' được tạo cho đối tượng num2 nhưng không tồn tại cho num1
# AttributeError: 'SoPhuc' object has no attribute 'attr'
# print(num1.attr)

Output

2+3j
(5, 0, 10)

Xóa bỏ thuộc tính và đối tượng

Any attribute of an object can be deleted anytime, using the del statement. Try the following on the Python shell to see the output.

class SoPhuc:
    def __init__(self, r=0, i=0):
        self.thuc = r
        self.ao = i

    def hienthi(self):
        print(f'{self.thuc}+{self.ao}j')


# Tạo đối tượng 
num1 = SoPhuc(2, 3)

# Gọi phương thức hienthi()
# Output: 2+3j
num1.hienthi()

# Tạo đối tượng SoPhuc khác
# thêm thuộc tính 'attr'
num2 = SoPhuc(5)
num2.attr = 10

# Output: (5, 0, 10)
print((num2.thuc, num2.ao, num2.attr))

# thuộc tính 'attr' được tạo cho đối tượng num2 nhưng không tồn tại cho num1
# AttributeError: 'SoPhuc' object has no attribute 'attr'
# print(num1.attr)

# xóa phần ảo của đối tượng num1
del num1.ao 
# Lệnh sau sẽ gây lỗi vì không tồn tại thuộc tính 'ao'
# 'SoPhuc' object has no attribute 'ao'
print(num1.hienthi())


del SoPhuc.hienthi
# AttributeError: 'SoPhuc' object has no attribute 'hienthi'
print(num1.hienthi())

Ta có thể xóa bằng chính tên đối tượng với câu lệnh del.

c1 = SoPhuc(1,3)
del c1
# NameError: name 'c1' is not defined
print(c1)

PreviousBài 32. Lập trình hướng đối tượngNextBài 34. Kế thừa

Last updated 4 years ago

Was this helpful?