Page 73 - Python Simple
P. 73
9. Lớp http://www.vithon.org/tutorial/2.5/node11.html
Chúng ta có thể làm được gì với những đối tượng trường hợp? Tác vụ duy nhất mà các
đối tượng trường hợp hiểu được là tham chiếu thuộc tính. Có hai loại tên thuộc tính
hợp lệ, thuộc tính dữ liệu và phương thức.
data attributes (thuộc tính dữ liệu lớp) tương ứng với ``biến trường hợp'' trong
Smalltalk, và ''thành viên dữ liệu'' trong C++. Thuộc tính dữ liệu không cần được khai
báo; như các biến nội bộ, chúng tự động tồn tại khi được gán vào. Ví dụ, nếu x là một
trường hợp của MyClass được tạo ra ở trên, đoạn mã sau in ra giá trị 16, mà không
chừa lại dấu vết:
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print x.counter
del x.counter
Loại tham chiếu thuộc tính trường hợp khác là một method (phương thức). Một
phương thức là một hàm ``của'' một đối tượng. (Trong Python, từ phương thức không
chỉ riêng cho trường hợp lớp: các kiểu đối tượng khác cũng có thể có phương thức. Ví
dụ, đối tượng danh sách có phương thức tên append, insert, remove, sort, v.v... Tuy
nhiên, trong phần sau chúng ta sẽ chỉ dùng từ phương thức dể chỉ các phương thức
của đối tượng trường hợp lớp, trừ khi được chỉ định khác đi.)
Các tên phương thức hợp lệ của một đối tượng trường hợp phụ thuộc vào lớp của nó.
Theo định nghĩa, mọi thuộc tính của một lớp mà là những đối tượng hàm định nghĩa
các phương thức tương ứng của các trường hợp của lớp đó. Trong ví dụ của chúng ta,
x.f là một tham chiếu phương thức hợp lệ, vì MyClass.f là một hàm, nhưng x.i
không phải, bởi vì MyClass.i không phải. Nhưng x.f không phải là một thứ như
MyClass.f -- nó là một method object (đối tượng phương thức), không phải là một đối
tượng hàm.
9.3.4 Đối tượng phương thức
Thông thường, một phương thức được gọi ngay sau khi nó bị buộc:
x.f()
Trong MyClass , nó sẽ trả về chuỗi 'hello world'. Tuy nhiên, cũng không nhất thiết
phải gọi một phương thức ngay lập tức: x.f là một đối tượng phương thức, và có thể
được cất đi và gọi vào một thời điểm khác. Ví dụ:
xf = x.f
while True:
print xf()
sẽ tiếp tục in "hello world" mãi mãi.
Chuyện gì thật sự xảy ra khi một phương thức được gọi? Bạn có thể đã nhận ra rằng
x.f() được gọi với không thông số, mặc dù định nghĩa hàm của f chỉ định một thông
số. Chuyện gì xảy ra với thông số đó? Python chắc chắn nâng một biệt lệ khi một hàm
cần một thông số được gọi suông -- cho dù thông số đó có được dùng hay không đi
nữa...
Thật ra, bạn cũng có thể đã đoán ra được câu trả lời: điểm đặc biệt của phương thức
5 of 13 08/31/2011 10:27 AM