Các ví dụ mô hình hóa dữ liệu Python

Các ví dụ mô hình hóa dữ liệu Python

Như bạn đã thấy, các objects và classes là hữu dụng cho mô hình hóa các objects trong thế giới thực. Trong phần này,
chúng ta khám phá một vài ví dụ khác.

Các số hữu tỷ

Chúng ta bắt đầu với các số. Một số hữu tỷ chứa 2 phần số nguyên, một tử số và một mẫu số, và được viết sử dụng hình
thức tử số/mẫu số. Các ví dụ là 1/2, 1/3 ..vv..Các hoạt động trên các số hữu tỷ bao gồm số học và so sánh. Python
không có dạng tích hợp cho số hữu tỷ. Chúng ta hãy phát triển một class mới tên Rational để hỗ trợ dạng này dữ liệu.
Giao diện của Rational class bao gồm một constructor cho tạo một số hữu tỷ, một hàm str cho chứa một trình bày string,
và các cái truy cập cho tử số và mẫu số. Chúng ta cũng sẽ thể hiện làm cách nào bao gồm các phương thức cho số học
và so sánh. Sau đây là một phiên làm việc mẫu để minh họa sử dụng class mới:

>>> oneHalf = Rational(1, 2)
>>> oneSixth = Rational(1, 6)
>>> print(oneHalf)
1/2
>>> print(oneHalf + oneSixth)
2/3
>>> oneHalf == oneSixth
False
>>> oneHalf > oneSixth
True

Chú ý rằng phiên làm việc này sử dụng các toán tử tích hợp +, ==, và < với các objects của class mới, Rational. Python
cho phép lập trình viên overload nhiều toán tử tích hợp cho sử dụng với các dạng dữ liệu mới.
Chúng ta phát triển class này theo 2 bước. Trước tiên, chúng ta quan tâm đến trình bày bên trong của một số hữu tỷ
và cũng là trình bày string của nó. Constructor mong đợi tử số và mẫu số như các đối số và thiết lập 2 biến thực
thể tới thông tin này. Phương thức này sau đó giảm số hữu tỷ tới từ ngữ thấp nhất của nó. Để giảm một số hữu tỷ
tới từ ngữ thấp nhất của nó, bạn trước tiên phải tính toán ước chung lớn nhất (GCD) của tử số và mẫu số, sử dụng
thuật toán Euclid, như mô tả trong bài tập lập trình trong các học phần trước. Bạn sau đó chia tử số và mẫu số cho
GCD này. Các nhiệm vụ này được giao cho 2 phương thức Rational khác _reduce và _gcd. Vì các phương thức này không
có ý định có trong giao diện của class, các tên của chúng bắt đầu với kí hiệu _. Thực hiện bước giảm trong constructor
đảm bảo rằng nó sẽ không phải thực hiện trong bất cứ hoạt động khác. Sau đây là code cho bước đầu tiên:

“””
File: rational.py
Resources to manipulate rational numbers.
“””
class Rational(object):

“””Represents a rational number.”””
def __init__(self, numer, denom) :

“””Constructor creates a number with the given
numerator and denominator and reduces it to lowest
terms.”””
self.numer = numer
self.denom = denom
self._reduce()

def numerator(self):

“””Returns the numerator.”””
return self.numer

def denominator(self):

“””Returns the denominator.”””
return self.denom

def __str__(self):

“””Returns the string representation of the
number.”””
return str(self.numer) + “/” + str(self.denom)

def _reduce(self):

“””Helper to reduce the number to lowest terms.”””
divisor = self._gcd(self.numer, self.denom)
self.numer = self.numer // divisor
self.denom = self.denom // divisor

def _gcd(self, a, b):

“””Euclid’s algorithm for greatest common
divisor (hacker’s version).”””
(a, b) = (max(a, b), min(a, b))
while b > 0:

(a, b) = (b, a % b)

return a

# Methods for arithmetic and comparisons go here

Bạn bây giờ có thể test class bằng cách khởi tạo thực thể các số và in chúng ra. Chú ý rằng class này chỉ hỗ
trợ các số hữu tỷ dương. Khi bạn đã thỏa mãn rằng dữ liệu đang được trình bày đúng đắn, bạn có thể di chuyển tới
bước tiếp theo.

Chia sẻ