Download as pdf or txt
Download as pdf or txt
You are on page 1of 23

PYTHON CĂN BẢN

PHẦN 2 – NGÔN NGỮ PYTHON CĂN BẢN


2.5 – Sử dụng lớp (class)
và lập trình hướng đối tượng

Nguyễn Minh Triết,


Đại học Sư Phạm Kỹ Thuật Tp.HCM
Tp.HCM, 08/2022
2.5 – Lập trình hướng đối tượng
Lớp (class) trong Python (còn gọi là hướng đối tượng)
Class là một dạng “kiểu dữ liệu” đặc biệt:
• Class có các “lớp thuộc tính” được người dùng định
nghĩa khi tạo class.
• Khi tạo biến gán cho 1 class. Biến đó sẽ có các thuộc
tính của class như khi tạo class.
• Khi thay đổi định nghĩa một class, các biến khai báo
dùng class đó cũng bị thay đổi theo.

Biến bình thường Biến kiểu class


user1_name = ‘Andy’ user1.name = ‘Andy’
user1_age = ‘20’ user1.age = ‘20’

Lập trình Python căn bản 9/15/2022 89


2.5 – Lập trình hướng đối tượng
Khai báo class trong Python

class <tên_class>:
def __init__(self, m1, m2):
self.m1 = m1
self.m2 = m2
def <hàm1>(self, b1, b2):
print(self.m1)
print(b1)
return <giá trị>
def <hàm2>(self, b3, b4):
<lệnh3>
<lệnh4>
return <giá trị>

Lập trình Python căn bản 9/15/2022 90


2.5 – Lập trình hướng đối tượng
Sử dụng class trong Python

class sinhvien:
def __init__(self, ten, mssv):
self.ten = ten
self.mssv = mssv
def get_EntranceYear(self):
EntranceYear = '20'+self.mssv[0:2]
return eval(EntranceYear)
Triet=sinhvien('Triet','1402123')
print(Triet.get_EntranceYear())

Lập trình Python căn bản 9/15/2022 91


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản
1. Tạo class tên car với các thuộc tính
- buyMonth: Tháng mua
- buyYear: Năm mua
- owner: Tên chủ xe
- price: Giá mua xe mới VNĐ (VD: 600000000)
- checkWarranty(): Trả về số tháng còn bảo hành,
biết thời hạn bảo hành là 60 tháng.
- checkPrice(): Trả về giá trị còn lại của xe. Tính
như sau: Trong 12 tháng đầu giảm 10% giá trị (so với giá
xe mới). Sau 12 tháng thì mỗi tháng giảm 0.5% giá trị.

Lập trình Python căn bản 9/15/2022 92


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản
2. Tạo class tên sanpham với các thuộc tính
- name: Tên sản phẩm
- price: Giá sản phẩm VNĐ (VD: 600000000)
- promoPrice(self, percent): Trả về giá tiền sau khi
trừ % giảm giá nhập từ percent.
- printPrice(self): Trả về chuỗi dạng “San pham
<name> co gia goc la <price>”.

Lập trình Python căn bản 9/15/2022 93


2.5 – Lập trình hướng đối tượng
Một số thao tác với class trong Python

Hàm def __init__() sẽ được gọi thực hiện ngay khi


khai báo biến sử dụng class

class Person:
def __init__(self, name):
self.name = name
print(‘Hello’,name)
user1 = Person(‘Triet’)
## In ra màn hình ‘Hello Triet’

Lập trình Python căn bản 9/15/2022 94


2.5 – Lập trình hướng đối tượng
Một số thao tác với class trong Python

Hàm __dict__ sẽ truy ra được có bao nhiêu thành


phần trong class
class Person:
def __init__(self, name,buy):
self.name = name
self.buy = buy
A = Person('A','B')
print(A.__dict__)
## {'name': 'A', 'buy': 'B'}
Lập trình Python căn bản 9/15/2022 95
2.5 – Lập trình hướng đối tượng
Một số thao tác với class trong Python

Hàm __doc__ sẽ in ra ghi chú hướng dẫn sử dụng


class Person:
''' Document your class'''
def __init__(self, name,buy):
self.name = name
self.buy = buy
A = Person('A','B')
print(A.__doc__)
## ' Document your class'
Lập trình Python căn bản 9/15/2022 96
2.5 – Lập trình hướng đối tượng
Một số thao tác với class trong Python
Cấm truy cập biến bên trong class sử dụng tiền tố __
trước tên biến

class Vehicle:
__name = "Car"
print(Vehicle.__name)
## AttributeError: type object
‘Vehicle’ has no attribute
‘__name’

Lập trình Python căn bản 9/15/2022 97


2.5 – Lập trình hướng đối tượng
class Counter: class Counter:
def __init__(self): def __init__(self):
self.current = 0 self._current = 0
def increment(self): def increment(self):
self.current += 1 self._current += 1
def value(self): def value(self):
return self.current return self._current
counter = Counter() counter = Counter()
counter.increment() counter.increment()
counter.current = -999 counter.current = -999
print(counter.value()) print(counter.value())

Lập trình Python căn bản 9/15/2022 98


2.5 – Lập trình hướng đối tượng
class Counter: class Counter:
def __init__(self): def __init__(self):
self._current = 0 self.__current = 0
def increment(self): def increment(self):
self._current += 1 self.__current += 1
def value(self): def value(self):
return self._current return self.__current
counter = Counter() counter = Counter()
counter.increment() counter.increment()
counter._current = -999 counter.__current = -999
print(counter.value()) print(counter.value())

Lập trình Python căn bản 9/15/2022 99


2.5 – Lập trình hướng đối tượng
class Counter:
def __init__(self):
self.__current = 0
def increment(self):
self.__current += 1
def value(self):
return self.__current
counter = Counter()
counter.increment()
counter._Counter__current = -999
print(counter.value())

Lập trình Python căn bản 9/15/2022 100


2.5 – Lập trình hướng đối tượng
Khi cần tạo một class dựa trên class đã có (dùng lại tất
cả định nghĩa đã có ở class cũ và thêm hàm, biến vào
class mới. Ta có thể khai báo tên class cũ khi tạo class
mới như sau:
class ParentClass: # Superclass
def parent_method(self):
return "Method in parent class"
class ChildClass(ParentClass): # Subclass
pass
child = ChildClass()
print(child.parent_method())
Lập trình Python căn bản 9/15/2022 101
2.5 – Lập trình hướng đối tượng
Kế thừa class: Ta có thể viết lại hàm đã định nghĩa

class ParentClass: # Superclass


def parent_method(self):
return "Method in parent class"
class ChildClass(ParentClass): # Subclass
def parent_method(self):
return "Method in child class"
child = ChildClass()
print(child.parent_method())

Lập trình Python căn bản 9/15/2022 102


2.5 – Lập trình hướng đối tượng
Khi đã viết lại hàm đã kế thừa mà muốn gọi hàm của lớp
đã kế thừa, ta dùng super()

class ParentClass: # Superclass


def method1(self):
return "Method in parent class"
class ChildClass(ParentClass): # Subclass
def method1(self):
return super(). method1()
child = ChildClass()
print(child.parent_method())
Lập trình Python căn bản 9/15/2022 103
2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

3. Tạo class tên temp với các thuộc tính


• Hàm c_to_f(self,c_temp) trả về nhiệt độ F theo
nhiệt độ C nhập vào
• Hàm f_to_c(self,f_temp) trả về nhiệt độ C theo
nhiệt độ F nhập vào.
• Hàm tempString(self, value, tempType) trả về
chuỗi:
‘nhiet do <value> oF’ nếu tempType là ‘F’ hay ‘f’
‘nhiet do <value> oC’ nếu tempType là ‘C’ hay ‘c’

Lập trình Python căn bản 9/15/2022 104


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

4. Tạo class tên Investment với các thuộc tính


• Biến vào là principal (p) và interest (i).
• Hàm value_after(self,n) trả về giá trị đầu tư sau n
năm. Công thức tính giá trị là p*(1+i)n
• Hàm __str__() trả về chuỗi dạng:
“Principal - $1000.00, Interest rate – 5.12%”

Lập trình Python căn bản 9/15/2022 105


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

5. Tạo class tên Product với các thuộc tính


• Biến vào là name, amount và price.
• Hàm get_price(self, n) trả về giá sản phẩm dựa
trên số lượng n mua. Với cách tính như sau:
- Mua số lượng dưới 10 thì giá không giảm.
- Sản phẩm thứ 10 đến 99 được giảm 10%
- Sản phẩm từ 100 trở lên giảm 20%.
• Hàm make_purchase(self, n) giảm số lượng
amount của sản phẩm hiện tại

Lập trình Python căn bản 9/15/2022 106


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

6. Tạo class tên Password_manager với các thuộc tính


• Biến vào là old_passwords dạng list lưu trữ các
giá trị mật khẩu cũ. Giá trị cuối list là giá trị mật
khẩu hiện tại. (current password)
• Hàm get_password(self) trả về mật khẩu hiện tại
• Hàm set_password(self, newPW) để đổi mật khẩu
hiện tại thành newPW nhập vào. Mật khẩu mới
newPW phải khác với các mật khẫu cũ trong
old_passwords. Nếu trùng, hàm trả về False, nếu
không trùng thì trả về True.

Lập trình Python căn bản 9/15/2022 107


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

7. Tạo class tên Time với các thuộc tính


• Hàm sec2min(self, seconds) trả về dạng chuỗi
‘mm:ss’ theo giá trị giây (seconds) nhập vào. Ví dụ
nhập vào 230 thì chuỗi trả ra ‘05:50’
• Hàm sec2hour(self, seconds) trả về dạng chuỗi
‘hh:mm:ss’ theo giá trị giây (seconds) nhập vào.
• Hàm min2sec(self, mins) ngược lại với hàm
sec2min
• Hàm hour2sec(self, hours) ngược lại với hàm
sec2hour

Lập trình Python căn bản 9/15/2022 108


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

8. Tạo class tên Converter với các thuộc tính


• Hàm feet(self, n, unit) trả về giá trị theo đơn vị
feet của n theo đơn vị unit. Ví dụ:
Converter.feet(1,”m”) trả về 3.28
• Tương tự cho các hàm in (hoặc inches), yards,
miles, km (hoặc kilometers), m (hoặc meters), cm
(centimeters), mm (milimeters)

Lập trình Python căn bản 9/15/2022 109


2.5 – Lập trình hướng đối tượng
Bài tập sử dụng class cơ bản

9. Tạo class tên NumSpell các thuộc tính


• Hàm vi(self, n) trả về chuỗi ký tự phiên ra từ số n
tiếng Việt. Ví dụ: NumSpell.vi(12) trả về ‘Mười hai’
• Hàm en(self, n) trả về chuỗi ký tự phiên ra từ số n
tiếng Anh. Ví dụ: NumSpell.en(12) trả về chuỗi
“Twelve”

Lập trình Python căn bản 9/15/2022 110

You might also like