You are on page 1of 29

Chương 2: LỚP VÀ ĐỐI TƯỢNG

2.1 Class trong Python


2.2 Sử dụng class
2.3 Constructor trong class
2.4 Instance attribute và instance method
2.5 Bài tập

1
2.1 Class trong python:
 2.1.1 Giới thiệu:
 Class (lớp) dùng để khai báo cấu trúc thuộc tính và
hành động cho một đối tượng nào đó.
 Class trong python được khai báo với từ khóa class theo
cấu trúc sau:
 
class class_name:
‘‘‘docstring’’’
#code
 Trong đó:
- class_name: tên của class dùng để phân biệt
- docstring: chú thích về class
- code: các câu lệnh của class
01/2009 2
2.1 Class trong python:
 VD:
 Câu lệnh khai báo class sinh viên (SV) đơn giản:

 
class SV:
# class sinh viên
pass
 Lưu ý:
- Khi khai báo class, có thể không cần docstring
- Trong một class phải có chứa ít nhất 1 câu lệnh
- Class có thể bao gồm thuộc tính (attribute), phương thức (method)
và phương thức khởi tạo (constructor)

01/2009 3
2.1 Class trong python:
 VD:
 Câu lệnh khai báo class sinh viên (SV) đơn giản:

 
class SV:
# class sinh viên
pass
 Lưu ý:
- Khi khai báo class, có thể không cần docstring
- Trong một class phải có chứa ít nhất 1 câu lệnh
- Class có thể bao gồm thuộc tính (attribute), phương thức (method)
và phương thức khởi tạo (constructor)

01/2009 4
2.1 Class trong python:
 2.1.2 Thuộc tính của lớp (class attribute):
 Thuộc tính trong class tương tự như biến trong lập trình
hướng cấu trúc.
 Để khai báo thuộc tính, sử dụng cách khai báo tương tự
khai báo biến:
 
class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = 2020
 Lưu ý:
- Class SV trên có 2 thuộc tính (attribute) là nganh_hoc và
khoa_hoc
- Các thuộc tính dùng để phân biệt các đối tượng trong class
01/2009 5
2.1 Class trong python:
 2.1.3 Phương thức (method):
 Phương thức là các hàm (function) được khai báo trong
class.
 Để khai báo phương thức, sử dụng cách khai báo tương
tự khai báo hàm thông thường:
 
class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def Add(self,ms,ten):
self.id = ms
self.name = ten

01/2009 6
2.1 Class trong python:
 2.1.3 Phương thức (method):

 Lưu ý:
- Từ khóa self dùng để chỉ chính class đang làm việc, cho
phép tương tác với các giá trị có trong class
- Phương thức (method): luôn có tham số đầu tiên là self, các
tham số khác nếu có phải đứng sau tham số self
- Trong class không có giới hạn về số lượng phương thức
- Phương thức có thể trùng tên với hàm nằm ngoài class
nhưng không được trùng tên với các phương thức khác trong
class

01/2009 7
2.2 Sử dụng class:
 2.2.1 Tạo đối tượng:
 Sau khi khai báo class, ta có thể khởi tạo class (tạo đối
tượng).
 Để khởi tạo class, dùng cú pháp đơn giản sau:

 
Object_name = class_name()

 Trong:
- Object_name: tên của đối tượng khởi tạo
- Class_name: tên của class đã khai báo trước đó

01/2009 8
2.2 Sử dụng class:
 2.2.1 Tạo đối tượng:

 Lưu ý:
- Có thể tạo nhiều đối tượng từ một class
- Các đối tượng thường có tên khác nhau
- Nếu có đối tượng trùng tên, python hiểu là tạo lại đối tượng
- Sau khi tạo đối tượng, có thể truy xuất đến các thuộc tính của class
thông qua đối tượng
- Khi truy xuất thuộc tính hoặc phương thức của đối tượng, phải
thông qua tên của đối tượng

01/2009 9
2.2 Sử dụng class:
 2.2.1 Tạo đối tượng:
 
class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def Add(self,ms,ten):
self.id = ms
self.name = ten

A = SV()
A.id = 20146111
A.name = ‘Nguyễn Văn A’
print(A.name)

01/2009 10
2.2 Sử dụng class:
 2.2.1 Tạo đối tượng:
 
class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def Add(self,ms,ten):
self.id = ms
self.name = ten

A = SV()
A.Add(20146111,’Nguyễn Văn A’)
print(A.name)

01/2009 11
2.2 Sử dụng class:

 2.2.2 So sánh các đối tượng: :


 Trong python, các đối tượng có thể được gán cho nhau
và cũng có thể được so sánh
 Để gán đối tượng, dùng cú pháp sau:
 
A = SV()
A.Add(20146111,’Nguyễn A’)
B = A

01/2009 12
2.2 Sử dụng class:

 2.2.2 So sánh các đối tượng: :


 Khi so sánh đối tượng, sử dụng toán tử so sánh như khi
so sánh giá trị
B
A = SV()
A.Add(20146111,’Nguyễn A’)
B = SV()
B.Add(20146111,’Nguyễn A’)

C = A
X = A == B
Y = A == C
01/2009 13
2.2 Sử dụng class:
 2.2.2 So sánh đối tượng:

 Lưu ý:
- Các đối tượng được khởi tạo khác nhau sẽ khác nhau cho dù
có cùng giá trị thuộc tính

01/2009 14
2.3 Constructor trong class:
 Constructor:
 Constructor (Phương thức khởi tạo): là một phương
thức đặc biệt trong class.
 Luôn có tên là __init__()
 Tham số đầu tiên của constructor luôn là self.
 Trong 1 class, chỉ có 1 constructor:

01/2009 15
2.3 Constructor trong class:
 Constructor:

 class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def __init__(self,a,b):
self.id = a
self.name = b

 Lưu ý:
- Constructor dùng để tạo ra đối tượng và gán giá trị cho các
thuộc tính

01/2009 16
2.3 Constructor trong class:
 Constructor:

 class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = 2020
def __init__(self,a,b):
self.id = a
self.name = b

A = SV(20146111, ‘Nguyễn An’)


B = SV(20146112, ‘Nguyễn Bình’)

01/2009 17
2.4 Instance attribute và Instance method:
 2.4.1 Thuộc tính của đối tượng (instance attribute):
 Thuộc tính của đối tượng chính là thuộc tính của riêng
từng đối tượng (khác với thuộc tính của class được dùng
chung cho tất cả đối tượng).
 Trong python, thuộc tính của đối tượng chính là các biến
được tạo ra trong constructor.

01/2009 18
2.4 Instance attribute và Instance method:
 2.4.1 Thuộc tính của đối tượng (instance attribute):

 class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = 2020
def __init__(self,a,b,diem):
self.id = a
self.name = b
self.score = diem

A = SV(20146111, ‘Nguyễn An’,8)


B = SV(20146112, ‘Nguyễn Bình’,9)

01/2009 19
2.4 Instance attribute và Instance method:
 2.4.1 Thuộc tính của đối tượng (instance attribute):

 Lưu ý:
- Trong VD trên, id và name là class attribute; còn score là
instance attribute
- Instance attribute chỉ có thể truy xuất qua đối tượng, còn
class attribute có thể được truy xuất trực tiếp mà không cần
đối tượng.
- Thông thường, class attribute là những thuộc tính dùng
chung (có giá trị giống nhau) của các đối tượng trong class
- Trong python, có thể tạo ra một instance attribute mới cho
một đối tượng đã có

01/2009 20
2.4 Instance attribute và Instance method:
 2.4.1 Thuộc tính của đối tượng (instance attribute):

 class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def __init__(self,a,b,diem):
self.id = a
self.name = b
self.score = diem

A = SV(20146111, ‘Nguyễn An’,8)


A.xep_loai = ‘Giỏi’
print(A.xep_loai)

01/2009 21
2.4 Instance attribute và Instance method:
 2.4.2 Instance method:
 Phương thức thông thường trong class còn được gọi là
instance method (để phân biệt với class method và static
method)
 Instance method có thể sử dụng class attribute và
instance attribute
 Instance method có thể làm thay đổi các attribute của đối
tượng

01/2009 22
2.4 Instance attribute và Instance method:
 2.4.2 Instance method:
  class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = ‘2020’
def __init__(self,a,b,diem):
self.id = a
self.name = b
self.score = diem
def show(self):
print(‘Họ tên’,self.name)
print(‘Điểm’,self.diem)

A = SV(20146111, ‘Nguyễn An’,8)


A.show()

01/2009 23
2.1 Class trong python:
 2.1.3 Phương thức (method):

 Lưu ý:
- Từ khóa self dùng để chỉ chính class đang làm việc, cho
phép tương tác với các giá trị có trong class
- Phương thức (method): luôn có tham số đầu tiên là self, các
tham số khác nếu có phải đứng sau tham số self
- Trong class không có giới hạn về số lượng phương thức
- Phương thức có thể trùng tên với hàm nằm ngoài class
nhưng không được trùng tên với các phương thức khác trong
class

01/2009 24
2.4 Instance attribute và Instance method:
 2.4.3 Class method:
 Phương thức của lớp là một phương thức chỉ sử dụng
được các thuộc tính của lớp (class attribute)
 Class method không thể làm thay đổi các instance
attribute của đối tượng.
 Trong class method, không sử dụng tham số self mà
thay vào đó sử dụng tham số cls

01/2009 25
2.4 Instance attribute và Instance method:
 2.4.3 Class method:
 class SV:
nganh_hoc = ‘CĐT’
khoa_hoc = 2020
def __init__(self,id,name):
self.id = id
self.name = name
def nhap_diem(self,qua_trinh,cuoi_ki):
self.midterm = qua_trinh
self.final = cuoi_ki
@classmethod
def sua_thong_tin(cls,nganh,khoa):
cls.nganh_hoc = nganh
cls.khoa_hoc = khoa

01/2009 26
2.4 Instance attribute và Instance method:
 2.4.2 Instance method:
  class SV:
id = 0
name = ‘’
def __init__(self,a,b,diem):
self.id = a
self.name = b
self.score = diem
def show(self):
print(‘Họ tên’,self.name)
print(‘Điểm’,self.diem)

A = SV(20146111, ‘Nguyễn An’,8)


A.show()

01/2009 27
2.4 Instance attribute và Instance method:
 2.4.4 Static method:
 Phương thức tĩnh của lớp là một phương thức cho
phép được gọi ra mà không cần sử dụng đến đối tượng
 Static method không thể làm thay đổi các instance
attribute của đối tượng.
 Trong static method, không được sử dụng tham số self
cũng như tham số cls

01/2009 28
2.4 Instance attribute và Instance method:
 2.4.3 Class method:
 class SV:
nganh_hoc = ‘’
khoa_hoc = 2020
def __init__(self,id,name):
self.id = id
self.name = name
def nhap_diem(self,qua_trinh,cuoi_ki):
self.midterm = qua_trinh
self.final = cuoi_ki
@staticmethod
def show():
print(‘Ngành’:,SV.nganh_hoc)
print(‘Khóa’:,SV.khoa_hoc)

01/2009 29

You might also like