Có một hạn chế về cú pháp của truy cập thuộc tính, bằng Python (ít nhất là trong việc thực hiện CPython 2.7.2):Tại sao không thể phân bổ tên là các từ khóa Python?
>>> class C(object): pass
>>> o = C()
>>> o.x = 123 # Works
>>> o.if = 123
o.if = 123
^
SyntaxError: invalid syntax
Câu hỏi của tôi là hai khía cạnh:
- Có một lý do cơ bản tại sao sử dụng tên thuộc tính từ khóa Python (như trong
o.if = 123
) bị cấm? - Có giới hạn ở trên đối với tên thuộc tính được ghi lại ở đâu?
Nó sẽ làm cho tinh thần để làm o.class = …
, trong một trong những chương trình của tôi, và tôi là một chút thất vọng vì không có khả năng để làm điều đó (o.class_
sẽ làm việc, nhưng nó không giống như đơn giản).
PS: Vấn đề rõ ràng là if
và class
là từ khóa Python. Câu hỏi là lý do tại sao sử dụng từ khóa làm tên thuộc tính sẽ bị cấm (Tôi không thấy bất kỳ sự mơ hồ nào trong biểu thức o.class = 123
) và cho dù đây là được ghi lại.
Do trình phân tích cú pháp đơn giản hơn khi từ khóa luôn là từ khóa và không theo ngữ cảnh. Vì vậy, mã thậm chí không đến điểm có quyền truy cập thuộc tính, nó chỉ đơn giản là một lỗi cú pháp ở cấp phân tích cú pháp (vì 'if' là một phần của ngữ pháp và nó không bao giờ xuất hiện ở nơi này). Nó giống nhau trong hầu hết các ngôn ngữ và ngữ pháp ngôn ngữ là tài liệu cho điều đó. –
Ngoài ra, 'cls' thường được sử dụng cho các tên chứa tham chiếu đến các lớp. –
Thậm chí nếu bạn có một trình phân tích cú pháp có thể phân biệt các từ khóa với các biến/tên hàm, nó không đảm bảo rằng một người có thể che giấu các từ khóa khác trong một trường hợp góc. Sẽ dễ dàng hơn nhiều để duy trì sự tỉnh táo nếu bạn chỉ thẳng ra cấm sử dụng vài chục cái tên. –