Page 75 - Python Simple
P. 75
9. Lớp http://www.vithon.org/tutorial/2.5/node11.html
f = f1
def g(self):
return 'hello world'
h = g
Bây giờ f, g và h đều là thuộc tính của lớp C mà tham chiếu tới các đối tượng hàm, và
do đó chúng đều là phương thức của các trường hợp của C -- h hoàn toàn tương đương
với g. Chú ý rằng kiểu viết này thường chỉ làm người đọc càng thêm khó hiểu mà thôi.
Phương thức có thể gọi phương thức khác thông qua thuộc tính phương thức của
thông số self :
class Bag:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self, x):
self.add(x)
self.add(x)
Phương thức có thể tham chiếu tới các tên toàn cục theo cùng một cách như các hàm
thông thường. Phạm vi toàn cục của một phương thức là mô-đun chứa định nghĩa lớp.
(Phạm vi toàn cục không bao giờ là lớp!) Trong khi bạn ít gặp việc sử dụng dữ liệu
toàn cục trong một phương thức, có những cách dùng hoàn toàn chính đáng: ví dụ
như hàm và mô-đun được nhập vào phạm vi toàn cục có thể được sử dụng bởi phương
thức, cũng như hàm và lớp được định nghĩa trong đó. Thông thường, lớp chứa các
phương thức này được định nghĩa ngay trong phạm vi toàn cục, và trong phần kế đây
chúng ta sẽ thấy tại sao một phương thức muốn tham chiếu tới chính lớp của nó!
9.5 Kế thừa
Dĩ nhiên, một tính năng ngôn ngữ sẽ không đáng được gọi là ``lớp'' nếu nó không hỗ
trợ kế thừa. Cú pháp của một định nghĩa lớp con như sau:
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-N>
Tên BaseClassName phải đã được định nghĩa trong một phạm vi chứa định nghĩa lớp
con. Thay vì tên lớp cơ sở, các biểu thức khác cũng được cho phép. Điều này rất hữu
ích, ví dụ, khi mà lớp cơ sở được định nghĩa trong một mô-đun khác:
class DerivedClassName(modname.BaseClassName):
Việc thực thi định nghĩa lớp con tiến hành như là lớp cơ sở. Khi một đối tượng lớp được
tạo ra, lớp cơ sở sẽ được nhớ. Nó được dùng trong việc giải các tham chiếu thuộc tính:
nếu một thuộc tính không được tìm thấy ở trong lớp, việc tìm kiếm sẽ tiếp tục ở lớp cơ
sở. Luật này sẽ được lặp lại nếu lớp cơ sở kế thừa từ một lớp khác.
Không có gì đặc biệt trong việc tạo trường hợp của các lớp con: DerivedClassName()
7 of 13 08/31/2011 10:27 AM