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
   68   69   70   71   72   73   74   75   76   77   78