Sagen wir, ich definieren diese Klasse:Warum erlauben setattr und getattr whitespace?
class A:
pass
a = A()
Jetzt offensichtlich kann ich Attribute gesetzt wie so:
a.x = 5
Aber mit setattr
, ich a
Attribute geben kann, die Leerzeichen in ihren Namen enthalten.
setattr(a, 'white space', 1)
setattr(a, 'new\nline', None)
dir(a)
enthält 'white space'
und 'new\nline'
.
ich diese Attribute mit dem .
Operator nicht zugreifen können, weil es eine SyntaxError
aufwirft:
>>> 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
Aber ich kann mit getattr
:
>>> getattr(a, 'white space')
1
>>> getattr(a, 'new\nline')
None
Gibt es einen Grund für diese Funktionalität? Wenn ja, was ist das?
Sollten wir davon Gebrauch machen oder den in PEP8 definierten Standards entsprechen?
Es erlaubt auch Bindestriche und die meisten anderen Zeichen als direkte Attribute nicht gültig. –
In der Tat. Der Attributname ist nur eine Zeichenfolge, die ein Diktat angibt. –