Chúng ta đã thấy rằng mỗi giá trị trong Python có một kiểu. một số nguyên, một số dấu phẩy động, một Boolean, một chuỗi, một danh sách, một bộ, một từ điển hoặc một bộ xử lý tệp. Tuy nhiên, khi viết các chương trình lớn hơn, sẽ rất hữu ích khi phát triển các loại của riêng chúng ta, để chúng ta có thể suy nghĩ về cách thao tác với những thứ cụ thể cho ứng dụng của mình, như khách hàng hoặc kho hàng.
Sử dụng các lớp
Phát triển phần mềm bằng cách phát triển các kiểu mới được gọi là lập trình hướng đối tượng. Lập trình hướng đối tượng liên quan đến việc hiểu một số thuật ngữ mới. Đầu tiên, một lớp là loại do người dùng định nghĩa, xác định các thuộc tính mà mỗi giá trị của loại đó có. Một giá trị riêng lẻ của loại lớp được gọi là một thể hiện hoặc đối tượng [hai thuật ngữ này đồng nghĩa với nhau]. Mỗi phiên bản sẽ có một số giá trị được đặt tên cung cấp thông tin về phiên bản đó, mỗi giá trị được gọi là thuộc tính dữ liệu. Và các phiên bản sẽ có các phương thức, về cơ bản là các chức năng mà phiên bản đó có thể thực hiện;
Như một ví dụ về một lớp trong Python, giả sử chúng ta muốn xác định một loại để biểu diễn các điểm, được gọi là Point
. Chúng ta sẽ tìm hiểu cách định nghĩa một lớp sau, nhưng bây giờ hãy tập trung vào cách chúng ta có thể muốn sử dụng các điểm.
o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0p = Point[] # create point that we move to [5, 5]
p.move_to[5, 5]p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
d = o.distance_to[p] # compute distance between both points
print[d]
Dòng đầu tiên tạo một đối tượng Point
riêng lẻ. “Gọi” lớp như thể nó là một hàm tạo ra một thể hiện mới của lớp. Khi điều đó xảy ra, mỗi phiên bản Point
có hai thuộc tính dữ liệu, tọa độ x và tọa độ y, được đặt tên đủ thích hợp là x
và y
. Vì vậy, nếu o
đề cập đến một trường hợp riêng lẻ, tôi có thể truy xuất tọa độ x của o
bằng cách sử dụng append
1
Lớp Point
cũng định nghĩa một số phương thức mà mỗi điểm riêng lẻ có thể thực hiện. Một phương thức, tên là append
3, chỉ cần di chuyển điểm đến tọa độ có tên trong tham số. Một cái khác, tên là append
4, thêm các tham số vào tọa độ x và y của điểm. Và cuối cùng, phương thức append
5 lấy một điểm khác làm tham số và trả về khoảng cách giữa hai điểm đó
Định nghĩa các lớp
Đoạn mã trên sẽ không hoạt động trừ khi chúng ta thực sự có một lớp Point
. Trong thực tế, chúng ta phải tạo ra nó. Sau đây là một ví dụ
append
7
append
8
Chúng tôi định nghĩa lớp bắt đầu bằng một khai báo append
9, theo sau là tên của lớp chúng tôi đang xác định. Bên trong append
9 là danh sách một số “hàm” thực sự tương ứng với các phương thức của lớp
Một phương thức có tên Point
1 [lưu ý dấu gạch dưới kép ở cả hai bên] được gọi là hàm tạo. Nó có chức năng đặc biệt. Phương thức này được thực thi ngay khi tạo một đối tượng mới. Khi chúng ta nói “Point
2”, đầu tiên Python sẽ phân bổ bộ nhớ cho đối tượng và sau đó nhập hàm tạo, chuyển đối tượng mới được tạo làm tham số đầu tiên. Công việc của hàm tạo là gán các giá trị ban đầu cho từng thuộc tính dữ liệu của đối tượng
Trong trường hợp này, hàm tạo muốn khởi tạo hai thuộc tính của mỗi điểm, x
và y
. Lưu ý cách chúng tôi sử dụng cú pháp Point
5 để tham chiếu đến thuộc tính dữ liệu. Thay vào đó, nếu chúng ta viết “Point
6”, chúng ta sẽ chỉ tạo một biến cục bộ sẽ biến mất ngay sau khi chức năng kết thúc. Nhưng khi chúng tôi viết Point
5, chúng tôi đang gửi thuộc tính dữ liệu x
vào Point
9, là đối tượng mới được tạo
Theo dõi p = Point[] # create point that we move to [5, 5] p.move_up[7] # move point p to [5, 12] p = Point[] # create point that we move to [5, 5]Point
1, bạn sẽ thấy thêm ba chức năng, mỗi chức năng tương ứng với một trong các phương thức. Mỗi chức năng bắt đầu với một tham số bổ sung, một lần nữa được đặt tên là Point
9, tham chiếu đến đối tượng mà phương thức đã được gọi. Khi Python thực thi “o = Point[] # create point at [0,0]
2”, nó nhập vào
print[o.x] # access o's x-coordinate: 0
p.move_to[5, 5]
print[p.y] # access p's y-coordinate: 12append
3 với o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0
p.move_to[5, 5]
p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
Point
9, 4 cho đối số thứ hai là o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0p = Point[] # create point that we move to [5, 5]
p.move_to[5, 5]
p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
6 và 5 cho đối số thứ ba là o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0p = Point[] # create point that we move to [5, 5]
p.move_to[5, 5]
p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
7. Trong trường hợp này, append
3 nên cập nhật tọa độ x và tọa độ y của o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0p = Point[] # create point that we move to [5, 5]
p.move_to[5, 5]
p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
4, để bạn thấy phần thân cập nhật các thuộc tính x
và y
của Point
9 — nghĩa là, o = Point[] # create point at [0,0]
print[o.x] # access o's x-coordinate: 0p = Point[] # create point that we move to [5, 5]
p.move_to[5, 5]
p.move_up[7] # move point p to [5, 12]
print[p.y] # access p's y-coordinate: 12
4Lưu ý cách p = Point[] # create point that we move to [5, 5] p.move_up[7] # move point p to [5, 12] p = Point[] # create point that we move to [5, 5] p.move_up[7] # move point p to [5, 12]append
5 kết thúc lấy một điểm khác làm đối số của nó. Khi chúng ta gọi “d = o.distance_to[p] # compute distance between both points
5”, tham số đầu tiên
print[d]Point
9 sẽ là o
, trong khi tham số thứ hai d = o.distance_to[p] # compute distance between both points
8 sẽ là
print[d]o = Point[] # create point at [0,0]
4. Bên trong, chúng tôi muốn truy xuất tọa độ x của cả hai điểm, vì vậy bạn xem
print[o.x] # access o's x-coordinate: 0
p.move_to[5, 5]
print[p.y] # access p's y-coordinate: 12Point
5 để lấy tọa độ x của o
và Point
2 để lấy tọa độ x của o = Point[] # create point at [0,0]
4. Sự khác biệt được lưu vào
print[o.x] # access o's x-coordinate: 0
p.move_to[5, 5]
print[p.y] # access p's y-coordinate: 12Point
4, đây chỉ là một biến tạm thời để hỗ trợ tính toán [vì chúng tôi không viết Point
5], và do đó, nó sẽ biến mất ngay khi hàm trả về