Page 77 - Python Simple
P. 77
9. Lớp http://www.vithon.org/tutorial/2.5/node11.html
nhất một dấu dạch dưới ở cuối) được thay thế văn bản (textually replace) bằng
_classname__spam, trong đó classname là tên lớp hiện tại với các gạch dưới ở đầu cắt
bỏ. Việc xáo trộn tên (mangling) được thực hiện mà không quan tâm tới vị trí cú pháp
của định danh, cho nên nó có thể được dùng để định nghĩa các trường hợp, biến,
phương thức, riêng của lớp, hoặc các biến toàn cục, và ngay cả các biến của trường
hợp, riêng với lớp này trên những trường hợp của lớp khác . Nếu tên bị xáo trộn dài
hơn 255 ký tự thì nó sẽ bị cắt đi. Bên ngoài lớp, hoặc khi tên lớp chỉ có ký tự gạch
dưới, việc xáo trộn tên sẽ không xảy ra.
Xáo trộn tên nhằm cung cấp cho các lớp một cách định nghĩa dễ dàng các biến và
phương thức ``riêng'', mà không phải lo về các biến trường hợp được định nghĩa bởi
lớp con, hoặc việc sử dụng biến trường hợp bởi mã bên ngoài lớp. Lưu ý rằng việc xáo
trộn tên được thiết kế chủ yếu để tránh trùng lặp; người quyết tâm vẫn có thể truy cập
hoặc thay đổi biến riêng. Và điều này cũng có thể có ích trong các trường hợp đặc biệt,
như trong trình gỡ rối, và đó là một lý do tại sao lỗ hổng này vẫn chưa được vá.
Lưu ý rằng mã truyền vào exec, eval() hoặc execfile() không nhận tên lớp của lớp
gọi là tên lớp hiện tại; điều này cũng giống như tác dụng của câu lệnh global , tác
dụng của nó cũng bị giới hạn ở mã được biên dịch cùng. Cùng giới hạn này cũng được
áp dụng vào getattr(), setattr() và delattr(), khi tham chiếu __dict__ trực tiếp.
9.7 Những điều khác
Đôi khi nó thật là hữu ích khi có một kiểu dữ liệu giống như Pascal ``record'' hoặc C
``struct'', gói gọn vài mẩu dữ liệu vào chung với nhau. Một định nghĩa lớp rỗng thực
hiện được việc này:
class Employee:
pass
john = Employee() # Create an empty employee record
# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000
Với mã Python cần một kiểu dữ liệu trừu tượng, ta có thể thay vào đó một lớp giả lập
các phương thức của kiểu dữ liệu đó. Ví dụ, nếu bạn có một hàm định dạng một vài dữ
liệu trong một đối tượng tập tin, bạn có thể định nghĩa một lớp với các phương thức
read() và readline() lấy dữ liệu từ một chuỗi, và truyền vào nó một thông số.
Các đối tượng phương trức trường hợp cũng có thuộc tính: m.im_self là một đối tượng
trường hợp với phương thức m, và m.im_func là đối tượng hàm tương ứng với phương
thức.
9.8 Biệt lệ cũng là lớp
Các biệt lệ được định nghĩa bởi người dùng cũng được định danh theo lớp. Bằng cách
này, một hệ thống phân cấp biệt lệ có thể được tạo ra.
Có hai dạng lệnh raise mới:
9 of 13 08/31/2011 10:27 AM