Tôi có nên đặt các giá trị mặc định cho các thành viên trong lớp của mình như thế này không:
class Foo:
num = 1
hay như thế này?
class Foo:
def __init__(self):
self.num = 1
Trong câu hỏi này, tôi phát hiện ra rằng trong cả hai trường hợp,
bar = Foo()
bar.num += 1
là một hoạt động được xác định rõ ràng.
Tôi hiểu rằng phương thức đầu tiên sẽ cung cấp cho tôi một biến lớp trong khi phương thức thứ hai thì không. Tuy nhiên, nếu tôi không yêu cầu biến lớp mà chỉ cần đặt giá trị mặc định cho các biến cá thể của mình, thì cả hai phương thức có tốt như nhau không? Hay một trong số chúng 'khủng' hơn cái còn lại?
Một điều tôi nhận thấy là trong hướng dẫn Django, họ sử dụng phương pháp thứ hai để khai báo Mô hình. Cá nhân tôi nghĩ rằng phương pháp thứ hai là thanh lịch hơn, nhưng tôi muốn biết cách 'tiêu chuẩn' là gì.
self.attr = attr or []
trong__init__
phương thức. Nó đạt được kết quả tương tự (tôi nghĩ) và vẫn rõ ràng và dễ đọc.