Ein Attribut kann nicht auf eine Zeichenkette gesetzt werden?

8

Normalerweise können Sie einem benutzerdefinierten Objekt ein beliebiges Attribut zuweisen, z. B.

%Vor%

Auf der anderen Seite können Sie nicht die gleiche Bindung mit einem String-Objekt machen:

%Vor%

Warum?

    
candide 27.10.2011, 01:25
quelle

2 Antworten

9

Weil der Typ str ein Typ ist, der kein Attribut dict hat. Von die Dokumentation , Abschnitt "Klassen":

  

Eine Klasse hat einen Namespace, der von einem Dictionary-Objekt implementiert wird.   Klassenattributverweise werden in Lookups übersetzt   B. C.x wird in C.__dict__["x"]

übersetzt

Sie können auch etwas Ähnliches für benutzerdefinierte Objekte erzwingen:

%Vor%

Im Allgemeinen sollten Sie Felder von Objekten, die Sie nicht verwenden sollen, nicht festlegen oder ändern. Die Dokumentation des spezifischen Datentyps sollte darauf verweisen, welche Felder für die public -Modifikation verfügbar sind.

Zum Beispiel ein ReadOnlyPoint -Objekt, bei dem die x- und y-Koordinaten nur für die Objektkonstruktion festgelegt sind:

%Vor%

Während die Eigenschaften x und y schreibgeschützt sind, können Sie beim Zugriff auf die Objekt-Interna den Status des Objekts ändern.

Die Möglichkeit, einem str -Objekt ein neues Feld hinzuzufügen, ist ein Implementierungsdetail, das für die von Ihnen verwendete Python-Version spezifisch ist.

    
vz0 27.10.2011 01:30
quelle
2

Ссылка

  

Wenn die Klasse eine Methode setattr () oder delattr () hat, ist dies der Fall   aufgerufen, anstatt das Instanzwörterbuch direkt zu aktualisieren.

Ссылка setattr

    
Falmarri 27.10.2011 01:32
quelle

Tags und Links