Page 69 - Python Simple
P. 69
9. Lớp http://www.vithon.org/tutorial/2.5/node11.html
Bài chỉ dẫn Python
9. Lớp
Chỉ cần một ít cú pháp và từ khóa mới, Python đã có thể hỗ trợ lớp. Nó là sự trộn lẫn
giữa C++ và Modula-3. Cũng như mô-đun, các lớp tron Python không đặt rào cản
tuyệt đối giữa định nghĩa lớp và người sử dụng, mà thay vào đó nó dựa vào sự lịch
thiệp trong cách dùng mà ``không phá định nghĩa.'' Tuy nhiên, các tính năng quan
trọng nhất của lớp vẫn được giữ lại trọn vẹn: cách kế thừa lớp hỗ trợ nhiều lớp cơ sở, lớp
con có thể định nghĩa lại bất kỳ phương thức nào của các lớp cơ sở của nó, và một
phương thức có thể gọi một phương thức cùng tên của một lớp cơ sở. Các đối tượng có
thể chứa một lượng dũ liệu riêng bất kỳ.
Theo thuật ngữ C++, mọi thành viên lớp (kể cả thành viên dữ liệu) là public(công
cộng), và mọi thành viên hàm là virtual(ảo). Không có bộ khởi tạo (constructor) hoặc
bộ hủy (destructor) đặc biệt. Cũng như Modula-3, không có cách viết tắt nào để tham
chiếu tới các thành viên của một đối tượng từ các phương thức của nó: hàm phương
thức được khai báo với thông số thứ nhất thể hiện chính đối tượng đó, và được tự động
truyền vào qua lệnh gọi. Như trong Smalltalk, các lớp cũng là các đối tượng theo một
nghĩa rộng: trong Python, mọi kiểu dữ liệu là đều là các đối tượng. Điều này cho phép
nhập (import) và đổi tên. Không như C++ và Modula-3, các kiểu có sẵn có thể được
dùng như các lớp cơ sở để mở rộng bởi người dùng. Và như trong C++ nhưng không
giống Modula-3, đa số các toán tử có sẵn với cú pháp đặc biệt (các toán tử số học, truy
cập mảng, v.v...) có thể được định nghĩa lại trong các trường hợp cụ thể của lớp.
9.1 Vài lời về thuật ngữ
Những từ chuyên ngành dùng ở đây theo từ vựng của Smalltalk và C++.
Các đối tượng có tính cá thể (individuality), và nhiều tên (trong nhiều phạm vi, scope)
có thể được gắn vào cùng một đối tượng. Trong các ngôn ngữ khác được gọi là tên
lóng (alias). Nó thường không được nhận ra khi dùng Python lần đầu, và có thể được
bỏ qua khi làm việc với các kiểu bất biến cơ bản (số, chuỗi, bộ). Tuy nhiên, tên lóng có
một ảnh hưởng đối với ý nghĩa của mã Python có sử dụng các đối tượng khả biến như
danh sách, từ điển, và đa số các kiểu thể hiện các vật ngoài chương trình (tập tin, cửa
sổ, v.v...). Nó thường được dùng vì tên lóng có tác dụng như là con trỏ theo một vài
khía cạnh nào đó. Ví dụ, truyền một đối tượng vào một hàm rẻ vì chỉ có con trỏ là
được truyền, và nếu một hàm thay đổi một đối tượng được truyền vào, thì nơi gọi sẽ
thấy các thay đổi đó -- thay vì cần hai kiểu truyền thông số như trong Pascal.
9.2 Phạm vi trong Python và vùng tên
Trước khi giới thiệu lớp, chúng ta sẽ cần hiểu phạm vi (scope) và vùng tên
(namespace) hoạt động như thế nào vì các định nghĩa lớp sẽ sử dụng chúng. Kiến thức
về vấn đề này cũng rất hữu dụng với những nhà lập trình Python chuyên nghiệp.
Bắt đầu với một vài định nghĩa.
1 of 13 08/31/2011 10:27 AM