Trong Python, tên self
là không phải là đặc biệt. Nó chỉ là một quy ước cho tên tham số, đó là lý do tại sao có một tham số self
trong __init__
. (Trên thực tế, __init__
không phải là rất đặc biệt trong hai, và đặc biệt là nó không thực sự tạo ra các đối tượng ... đó là một câu chuyện dài hơn)
C("abc").process()
tạo ra một trường hợp C
, nhìn lên các phương pháp process
trong lớp C
, và gọi phương thức đó với cá thể C
làm thông số đầu tiên. Vì vậy, nó sẽ kết thúc trong tham số self
nếu bạn cung cấp nó.
Mặc dù bạn đã có thông số đó, tuy nhiên, bạn sẽ không được phép viết một cái gì đó như def process(self, formatting = self.formatting)
, vì self
chưa nằm trong phạm vi mà bạn đặt giá trị mặc định. Trong Python, giá trị mặc định cho một tham số được tính khi hàm được biên dịch và "mắc kẹt" với hàm. (Đây cũng là lý do tương tự, nếu bạn sử dụng mặc định như []
, danh sách đó sẽ ghi nhớ các thay đổi giữa các cuộc gọi đến hàm.)
Làm cách nào tôi có thể thực hiện công việc này?
Cách truyền thống là sử dụng None
làm giá trị mặc định và kiểm tra giá trị đó và thay thế nó bên trong hàm.Bạn có thể thấy an toàn hơn một chút để tạo ra một giá trị đặc biệt cho mục đích (ví dụ object
là tất cả những gì bạn cần, miễn là bạn ẩn nó để mã gọi không sử dụng cùng một cá thể) thay vì None
. Dù bằng cách nào, bạn cũng nên kiểm tra giá trị này bằng is
, chứ không phải ==
.
Nguồn
2011-11-15 05:45:48
không sử dụng định dạng làm tên biến, vì nó được xây dựng trong chức năng trong python. – Yajushi
Chỉnh sửa sai lầm của 'self' trong' phương thức xử lý ' –