tiếp tục lặp lại lời khuyên của mike và alex và thêm màu của riêng tôi ...
sử dụng thuộc tính ví dụ là Python điển hình, độc đáo hơn. các thuộc tính lớp không được sử dụng - ít nhất là không có trong mã sản xuất trong 13 năm liên tiếp của tôi về Python. điều tương tự cũng đúng đối với các phương thức tĩnh và lớp ... không phổ biến lắm trừ khi có một ca sử dụng cụ thể hoặc một lập trình viên không muốn hiển thị chúng biết một số góc tối nghĩa của lập trình Python.
alex đề cập đến câu trả lời của mình rằng quyền truy cập sẽ nhanh hơn một chút do mức độ tra cứu ít hơn ... hãy để tôi làm rõ thêm cho những người chưa biết về cách hoạt động này, nó rất giống để truy cập biến - việc tìm kiếm sẽ xảy ra theo thứ tự này:
- người dân địa phương
- nonlocals
- globals
- built-in
để truy cập thuộc tính, thứ tự là:
- dụ
- lớp
- lớp cơ sở được xác định bởi MRO (phương pháp để giải quyết)
trong ví dụ của bạn ở trên, giả sử bạn' đang tìm kiếm thuộc tính path
. khi nó gặp một tham chiếu như "self.path
", Python sẽ xem xét các thuộc tính đối tượng đầu tiên cho phù hợp; khi thất bại, nó sẽ kiểm tra lớp mà từ đó đối tượng được khởi tạo từ đó.cuối cùng, nó sẽ tìm kiếm các lớp cơ sở. như alex đã nói, nếu thuộc tính của bạn được tìm thấy trong trường hợp, nó sẽ không trì hoãn lớp, do đó bạn tiết kiệm chút thời gian.
Tuy nhiên, nếu bạn nhấn mạnh vào các thuộc tính lớp, bạn sẽ phải từ bỏ chút này về hiệu suất, hoặc, thay thế khác của bạn là để tham khảo các đối tượng thông qua các lớp thay vì dụ, ví dụ, MyController.path
thay của self.path
. đó là một tra cứu trực tiếp mà sẽ nhận được xung quanh tra cứu trả chậm, nhưng như đề cập bên dưới, đó là biến toàn cục, vì vậy bạn mất bit mà bạn nghĩ bạn sẽ lưu (trừ khi bạn tạo tham chiếu cục bộ cho tên lớp [toàn cục]).
Sau khi đọc câu hỏi này và thấy câu trả lời, một trong những câu hỏi đầu tiên của tôi là, "Vậy làm thế nào để tôi truy cập các biến lớp?" - đó là vì đến thời điểm này tôi chỉ sử dụng các biến mẫu. Trong câu trả lời cho câu hỏi của riêng tôi, bạn làm điều đó thông qua tên lớp chính nó, mặc dù về mặt kỹ thuật bạn có thể làm điều đó thông qua một ví dụ quá. Đây là liên kết để đọc cho bất kỳ ai khác có cùng câu hỏi: http://stackoverflow.com/a/3434596/4561887 –