2012-06-06 5 views
5

Mögliche Duplizieren:
Why can't I directly add attributes to any python object?
Why can't you add attributes to object in python?was bewirkt, dass benutzerdefinierte Objekte AttributError in Python nicht auslösen?

Der folgende Code nicht werfen Attribute

class MyClass(): 
    def __init__(self): 
     self.a = 'A' 
     self.b = 'B' 
my_obj = MyClass() 
my_obj.c = 'C' 

, die mit

Kontrast
>>> {}.a = 'A' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'a' 

Was macht den Unterschied? Ist dict eine eingebaute Klasse, während MyClass benutzerdefiniert ist?

+1

Die eigentliche Frage ist mehr * was bewirkt, dass einige Objekte AttributeErrors werfen, wenn sie * setzen - Python ist dynamisch, also ist es natürlich, dass Sie dies tun können, nicht umgekehrt. –

+0

möglich duplizieren: http://stackoverflow.com/questions/1285269/why-cant-you-add-attributes-to-object-in-python http://stackoverflow.com/questions/1072649/python-language-question -attributes-of-object-vs-function – mgilson

+0

Der erste von mgilson oben angegebene Link hat eine gute Antwort. –

Antwort

2

Der Unterschied besteht darin, dass Instanzen benutzerdefinierter Klassen standardmäßig ein Wörterbuch mit Attributen enthalten. Sie können auf dieses Wörterbuch mit vars(my_obj) oder my_obj.__dict__ zugreifen.

class MyClass(object): 
    __slots__ = [] 

eingebauten Typen könnte auch bieten ein Attribut Wörterbuch, aber in der Regel sie es nicht tun: Sie können durch die Definition __slots__ die Schaffung eines Attributs Wörterbuch verhindern. Ein Beispiel für einen integrierten Typ, der unterstützt unterstützt Attribute ist der Typ einer Funktion.

Verwandte Themen