Mỗi lớp Python đều giữ các thuộc tính đã được xây dựng sẵn sau và chúng có thể được truy cập bởi sử dụng toán tử dot (dấu chấm .) như bất kỳ thuộc tính khác:
__dict__: Là Dictionary chứa namespace của lớp.
__doc__: Được sử dụng để truy cập Documentation String của lớp nếu có.
__name__: Là tên lớp.
__module__: Là tên Module trong đó lớp được định nghĩa. Thuộc tính là __main__ trong chế độ tương tác.
__bases__: Là một Tuple chứa các lớp cơ sở.
Với lớp Sinhvien trên, chúng ta sẽ thử truy cập tất cả các thuộc tính này.
class Sinhvien: 'Class co so chung cho tat ca sinh vien' svCount = 0 def __init__(self, ten, hocphi): self.ten = ten self.hocphi = hocphi Sinhvien.svCount += 1 def displayCount(self): print "Tong so Sinh vien %d" % Sinhvien.svCount def displaySinhvien(self): print "Ten : ", self.ten, ", Hoc phi: ", self.hocphi print "Sinhvien.__doc__:", Sinhvien.__doc__ print "Sinhvien.__name__:", Sinhvien.__name__ print "Sinhvien.__module__:", Sinhvien.__module__ print "Sinhvien.__bases__:", Sinhvien.__bases__ print "Sinhvien.__dict__:", Sinhvien.__dict__
Khi code trên được thực thi sẽ cho kết quả:
Sinhvien.__doc__: Class co so chung cho tat ca sinh vien Sinhvien.__name__: Sinhvien Sinhvien.__module__: __main__ Sinhvien.__bases__: () Sinhvien.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0xb7c84994>, 'svCount': 2, 'displaySinhvien': <function displaySinhvien at 0xb7c8441c>, '__doc__': 'Class co so chung cho tat ca sinh vien', '__init__': <function __init__ at 0xb7c846bc>}
Python sẽ hủy các đối tượng mà không cần đến nữa (các kiểu đã được xây dựng sẵn hoặc instance của lớp) một cách tự động để giải phóng không gian bộ nhớ. Tiến trình này được gọi là Garbage Collection được thực hiện bởi trình dọn rác Garbage Collector.
Trình dọn rác của Python chạy trong khi thực thi chương trình và được kích hoạt khi số tham chiếu của một đối tượng tiến về 0. Số tham chiếu của một đối tượng thay đổi khi số alias mà trỏ tới nó thay đổi.
Số tham chiếu của một đối tượng tăng khi nó được gán một tên mới hoặc được đặt trong một container (chẳng hạn như List, Tuple, Dictionary). Số tham chiếu của một đối tượng giảm khi nó bị xóa với lệnh del, tham chiếu của nó được tái gán, hoặc tham chiếu của nó thoát ra khỏi phạm vi. Khi số tham chiếu của một đối tượng tiến về 0, thì Python thu thập nó một cách tự động. Ví dụ:
a = 40 # Tao doi tuong <40> b = a # Tang so tham chieu cua <40> c = [b] # Tang so tham chieu cua <40> del a # Giam so tham chieu cua <40> b = 100 # Giam so tham chieu cua <40> c[0] = -1 # Giam so tham chieu cua <40>
Thường thì bạn sẽ không chú ý khi trình dọn rác hủy một instance và giải phóng bộ nhớ. Nhưng một lớp có thể triển khai phương thức đặc biệt là __del__(), được gọi là một destructor, mà được triệu hồi khi instance là chuẩn bị được hủy. Phương thức này có thể được sử dụng để xóa bất kỳ nguồn bộ nhớ nào được sử dụng bởi một instance.
__del__() destructor này in tên lớp của một instance mà chuẩn bị được hủy.
class Point: def __init( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed" pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # in id cua doi tuong del pt1 del pt2 del pt3
Khi code trên được thực thi sẽ cho kết quả sau:
3083401324 3083401324 3083401324 Point destroyed
Ghi chú: Một cách lý tưởng nhất là bạn nên định nghĩa các lớp của bạn trong file riêng biệt, sau đó bạn nên import chúng trong file chương trình chính bởi sử dụng lệnh import.
» Tin mới nhất:
» Các tin khác: