Nội dung phần này:
- Callable
- __del__ method
- __format__ method
Danh sách đầy đủ bài học ở đây.
06. Callable
Một object có thể được giả lập để có thể gọi được (callable) nhờ sử dụng __call__
.
Ví dụ:
>>> class Person:
... def __call__(self, name):
... return f'Hello {name}'
...
>>> p = Person()
>>> p('Eric')
'Hello Eric'
Điều này có thể được sử dụng nhưng một function-like object
(một object nhưng giống function) hoặc dùng để decorate class.
Ví dụ minh họa sẽ được thêm vào sau.
07. __del__ method
Giả sử bạn biết C++ thì hẳn bạn đã nghe tới khái niệm garbage collector
, khi bạn tạo ra nhiều object mà không sử dụng nữa thì nó sẽ trở thành rác (garbage).
Các ngôn ngữ lập trình khác nhau sẽ có kiểu dọn rác khác nhau. Ở Python, chúng ta cũng có garbage collector
(GC) để huy các object mà không được tham chiếu ở bất cứ đâu.
__del__
sẽ được gọi ngay trước khi object bị hủy bởi GC, do đó GC sẽ quyết định khi nào method này được gọi.
__del__
được gọi là finalizer
, đôi khi được gọi là destructor
nhưng có vẻ tên gọi này không chính xác.
Về cơ bản, chúng ta không điều khiển được khi nào __del__
được gọi, nó chỉ được gọi khi tất cả tham chiếu đến nó đều đã mất.
Nếu __del__
chứa tham chiếu đến biến toàn cục, hoặc object khác thì những object này sẽ biến mất khi __del__
được gọi.
Nếu có ngoại lệ (exception) xảy ra khi __del__
được gọi:
- exception sẽ không được raise, nó ở chế độ im lặng (silence)
- Mô tả về exception sẽ được gửi tới
stderr
- Chương trình chính sẽ khoong cảnh báo bất cứ thứ gì sai trong quá trình kết thức.
Tốt hơn là dùng context manager
để xóa tài nguyên.
Ví dụ minh họa sẽ được thêm vào sau.
08. __format__ method
Chúng ta dùng hàm format()
để định dạng một kiểu nào đó: number, date…
(Sẽ viết và cập nhật tiếp)