Class và việc Phân chia Module trong Python
Bài đăng này đã không được cập nhật trong 5 năm
Xin chào các bạn. Hôm nay mình sẽ giới thiệu với các bạn về Class và việc Phân chia Module trong Python
Class
Lập trình hướng đối tượng là một khái niệm không thể thiếu trong hầu hết các ngôn ngữ thông dụng hiện nay. Python cũng hỗ trợ lập trình hướng đối tượng với các khái niệm Class, Object, Override...
Khai báo một Class
Khai báo một class theo cú pháp sau:
class myclass([parentclass]):
assignments
def __init__(self):
statements
def method():
statements
def method2():
statements
Ví dụ một class:
class animal():
name = '' name = ''
age = 0
def __init__(self, name = '', age = 0):
self.name = name
self.age = age
def show(self):
print 'My name is ', self.name
def run(self):
print 'Animal is running...'
def go(self):
print 'Animal is going...'
class dog(animal):
def run(self):
print 'Dog is running...'
myanimal = animal()
myanimal.show()
myanimal.run()
myanimal.go()
mydog = dog('Lucy')
mydog.show()
mydog.run()
mydog.go()
Sau khi thực thi sẽ cho ra kết quả:
My Name is
Animal is running...
Animal is going...
My Name is Lucy
Dog is running...
Animal is going...
Trong ví dụ trên thì:
animal
vàdog
là 2 class. Trong đó classdog
kế thừa từ class cha làanimal
nên sẽ có các phương thức của classanimal
.name
vàage
là thuộc tính (Attribute) của class.- Phương thức
__init__(self)
là hàm tạo của class. Hàm này sẽ được gọi mỗi khi có một object mới được tạo (từ một class), gọi là quá trình tạo instance. show()
,run()
vàgo()
là 2 phương thức của 2 class. Khi khai báo phương thức có kèm tham sốself
dùng để truy cập ngược lại object đang gọi. Lúc gọi phươngthức thì không cần truyền tham số này.- Phương thức
run()
của classdog
gọi làoverride
của phương thứcrun()
của classanimal
.
Phân chia module
Tất cả ví dụ cho đến thời điểm này đều được thực thi trong
command line hoặc từ một file python .py
. Tuy nhiên, đối
với các ứng dụng lớn, có nhiều chức năng thì phân chia nhỏ
dự án thành các file khác nhau sẽ giúp dễ bảo trì và tái sử
dụng các thành phần đã thiết kế.
Chương này sẽ giúp bạn thiết kế các tính năng theo mô hình các module và khi cần thì sẽ gọi file tương ứng và sử dụng.
Các loại module / thư viện
Có 3 loại module thường thấy là:
- Viết bằng Python: có phần mở rộng là
.py
- Các thư viện liên kết động: có phần mở rộng là
.dll
,.pyd
,.so
,.sl
,... - C-Module liên kết với trình phiên dịch.
Đường dẫn tìm để load module
Để tải một module vào script của bạn, sử dụng cú pháp đơn giản:
import modulename
khi gặp câu lệnh trên thì trình biên dịch sẽ tiến hành tìm kiếm file module tương ứng theo thứ tự thư mục sau:
- Thư mục hiện hành mà script đang gọi
- Các thư mục trong PYTHONPATH (nếu có set)
- Các thư mục cài đặt chuẩn trên Linux/Unix..
Có thể biết được đường dẫn mà một module đã được load bằng đoạn code dưới đây:
import math
math.__file__
(Ví dụ trả về '/usr/lib/python2.5/lib-dynload/math.
so')
import random
random.__file__
(Ví dụ trả về '/usr/lib/python2.5/random.pyc')
Lấy danh sách thuộc tính và phương thức của một module
Để lấy được danh sách các thuộc tính và phương thức mà
module hỗ trợ, sử dụng hàm dir(modulename)
. Ví dụ:
dir(math)
['__doc__', '__file__', '__name__', '__package__',
'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2',
'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degree
s', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'fa
ctorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma'
, 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'lo
g', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians
', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
Có thể gọi hàm dir()
không truyền tham số để lấy các
thuộc tính và phương thức của scope hiện tại đang thực
thi.
Cách khai báo và sử dụng module
Giả sử bạn tạo một file python mymath.py
có nội dung như
sau:
def cong(a, b):
return a + b
def tru(a, b):
return a - b
def nhan(a, b):
return a * b
Sau đó, tạo một file có tên myexample.py
, trong cùng thư
mục với file mymath.py
vừa tạo ở trên, có nội dung như
sau:
import mymath
num1 = 1
num2 = 2
print 'Tong hai so la: ', mymath.cong(num1, num2)
Vào command line, thực hiện gọi file myexample như sau:
$ python myexample.py
Sau khi thực hiện sẽ hiển thị lên màn hình là
Tong hai so la: 3
Package module
Có thể gom nhiều module .py
vào một thư mục và tên thư
mục là tên của package và tạo một file __init__.py
trong
thư mục này.
Như vậy, cấu trúc thư của một package sẽ như sau:
|-- mypack
| |-- __init__.py
| |-- mymodule1.py
| |-- mymodule2.py
|
Có thể sử dụng mymodule1
theo cú pháp import sau:
import mypack.mymodule1
hoặc
import mypack.mymodule1 as mymodule1
hoặc
import mypack.mymodule1 as mod
Khi sử dụng một module thuộc một package thì các lệnh
trong file __init__.py
sẽ được thực hiện trước. Thông
thường thì file __init__.py
sẽ rỗng.
Có thể tạo các subpackage bên trong một package theo
đúng cấu trúc thư mục, có file __init__
.py . Ví dụ:
import mypack.mysubpack.mysubsubpack.module
Dưới đây mình đã giới thiệu với các bạn về Class cũng như là việc phân chia Module trong Python. Nếu có bất kì thắc mắc gì hãy để lại comment ở phía dưới nhé.
Tham Khảo
https://docs.python.org/3/tutorial/modules.html#compiled-python-files
All rights reserved