Page 71 - Python Simple
P. 71
9. Lớp http://www.vithon.org/tutorial/2.5/node11.html
Thông thường, phạm vi nội bộ tham chiếu các tên nội bộ của hàm hiện tại (dựa vào
văn bản). Bên ngoài hàm, phạm vi nội bộ tham chiếu cùng một vùng tên như phạm vi
toàn cục: vùng tên của mô-đun. Các định nghĩa lớp đặt thêm một vùng tên khác
trong phạm vi nội bộ.
Điểm quan trọng cần ghi nhớ là phạm vi được xác định theo văn bản: phạm vi toàn
cục của một hàm được định nghĩa trong một mô-đun là vùng tên của mô-đun đó, cho
dù mô-đun đó được gọi từ đâu, hoặc được đặt tên lóng nào. Mặt khác, việc tìm tên
được thực hiện lúc chạy -- tuy nhiên, định nghĩa ngôn ngữ đang phát triển theo hướng
xác định tên vào lúc ``dịch'', cho nên đừng dựa vào việc tìm tên động! (Thực ra thì
các biến nội bộ đã được xác định tĩnh.)
Một điểm ngộ của Python là các phép gán luôn gán vào phạm vi trong cùng. Phép
gán không chép dữ liệu -- chú chỉ buộc các tên và các đối tượng. Xóa cũng vậy: câu
lệnh "del x" bỏ ràng buộc x khỏi vùng tên được tham chiếu tới bởi phạm vi nội bộ.
Thực tế là mọi tác vụ có thêm các tên mới đều dùng phạm vi nội bộ: điển hình là các
câu lệnh nhập và các định nghĩa hàm buộc tên mô-đun hoặc tên hàm vào phạm vi nội
bộ. (Lệnh global có thể được dùng để cho biết một biến cụ thể là ở phạm vi toàn cục.)
9.3 Cái nhìn đầu tiên về lớp
Lớp thêm một ít cú pháp mới, ba kiểu đối tượng mới, và một ít ngữ nghĩa mới.
9.3.1 Cú pháp định nghĩa lớp
Kiểu đơn giản nhất của việc định nghĩa lớp nhìn giống như:
class ClassName:
<statement-1>
.
.
.
<statement-N>
Định nghĩa lớp, cũng như định nghĩa hàm (câu lệnhdef ) phải được thực thi trước khi
chúng có hiệu lực. (Bạn có thể đặt một định nghĩa hàm trong một nhánh của lệnh if ,
hoặc trong một hàm.)
Trong thực tế, các câu lệnh trong một định nghĩa lớp thường là định nghĩa hàm,
nhưng các câu lệnh khác cũng được cho phép, và đôi khi rất hữu dụng. Các định
nghĩa hàm trong một lớp thường có một dạng danh sách thông số lạ, vì phải tuân theo
cách gọi phương thức.
Khi gặp phải một định nghĩa lớp, một vùng tên mới được tạo ra, và được dùng như là
phạm vi nội bộ -- do đó, mọi phép gán vào các biến nội bộ đi vào vùng tên này. Đặc
biệt, các định nghĩa hàm buộc tên của hàm mới ở đây.
Khi rời khỏi một định nghĩa lớp một cách bình thường, một đối tượng lớp được tạo ra.
Đây cơ bản là một bộ gói (wrapper) của nội dung của vùng tên tạo ra bởi định nghĩa
lớp. Phạm vi nội bộ ban đầu (trước khi vào định nghĩa lớp) được thiết lập lại, và đối
tượng lớp được buộc vào đây qua tên lớp đã chỉ định ở định nghĩa lớp, (ClassName
trong ví dụ này).
3 of 13 08/31/2011 10:27 AM