Hãy nói rằng tôi xác định lớp này:Tại sao setattr và getattr cho phép khoảng trắng?
class A:
pass
a = A()
Bây giờ rõ ràng là tôi có thể thiết lập các thuộc tính như vậy:
a.x = 5
Nhưng với setattr
, tôi có thể cung cấp cho a
thuộc tính có chứa khoảng trắng trong tên của họ.
setattr(a, 'white space', 1)
setattr(a, 'new\nline', None)
dir(a)
chứa 'white space'
và 'new\nline'
.
tôi không thể truy cập vào các thuộc tính sử dụng toán tử .
, bởi vì nó đặt ra một SyntaxError
:
>>> a.white space
File "<interactive input>", line 1
a.white space
^
SyntaxError: invalid syntax
>>> a.new\nline
File "<interactive input>", line 1
a.new\nline
^
SyntaxError: unexpected character after line continuation character
Nhưng tôi có thể với getattr
:
>>> getattr(a, 'white space')
1
>>> getattr(a, 'new\nline')
None
Có một lý do đằng sau chức năng này? Nếu vậy, nó là cái gì?
Chúng ta có nên tận dụng điều này hay tuân theo các tiêu chuẩn được xác định trong PEP8 không?
Nó cũng cho phép dấu gạch ngang và hầu hết các ký tự khác không hợp lệ làm thuộc tính trực tiếp. –
Thật vậy. Tên thuộc tính chỉ là một chuỗi khóa một dict. –