10 Stimmen

Warum akzeptieren benutzerdefinierte Typen in Python ad-hoc Attribute (und eingebaute Typen nicht)?

Ich möchte gerne wissen, warum man in der Lage ist, ein neues Attribut ("neu" bedeutet "nicht zuvor im Klassenkörper definiert") für eine Instanz eines benutzerdefinierten Typs zu erstellen, aber nicht dasselbe für einen eingebauten Typ wie object selbst zu tun.

Ein Codebeispiel:

>>> class SomeClass(object):
...     pass
... 
>>> sc = SomeClass()
>>> sc.name = "AAA"
>>> sc.name
'AAA'
>>> obj = object()
>>> obj.name = "BBB"
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'object' object has no attribute 'name'

6voto

ondra Punkte 8374

Einige Objekte haben nicht das __dict__-Attribut (das ist ein Wörterbuch, das alle benutzerdefinierten 'neu definierten' Attribute speichert). Sie können das gleiche Verhalten mit der __slots__-Variable emulieren (siehe Python Referenz). Wenn Sie eine Klasse mit __dict__ ableiten, hat die __slots__-Variable keine Wirkung. Und da Sie immer von object für neue Stilklassen ableiten, darf object kein __dict__ haben, da dies die Verwendung von __slots__ unmöglich machen würde. Klassen ohne __slots__ verbrauchen weniger Speicher und sind wahrscheinlich etwas schneller.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X