Sobald Sie einem Namen für eine Instanz zuweisen, erhält er ein Instanzattribut, das das Klassenattribut schattiert.
Die einzige Möglichkeit, die Sie dem Klassenattribut zuweisen können, besteht darin, einem Attribut der Klasse, nicht einem Attribut der Instanz, z. wenn Sie eine Instanz haben, müssen Sie tun:
x1.__class__.pi = 20
# If you're on Py3, or on Py2 and x1 is an instance of a new-style class,
# using type(x1) is slightly "nicer" than manually accessing dunder special
# variables, but unfortunately, it doesn't work on old-style class instances
# For new-style class instances though, the following is equivalent:
type(x1).pi = 20
, wenn Sie alle Instanzen des gleichen Typs wie x1
wollen die Veränderung zeigen. Dies erhält die Klasse selbst von __class__
(oder über type
Funktion), dann wird sie zugewiesen.
Wenn Sie versehentlich eine Instanz erstellt Attribut und wollen wieder das Klassenattribut belichten, können Sie tun:
del x1.pi
das gelingen wird, wenn eine Instanz pi
genannte Attribut vorhanden ist, und raise AttributeError
wenn es nicht (es tut löscht das Klassenattribut nicht, wenn es existiert, müsstest du dazu del x1.__class__.pi
/del type(x1).pi
tun.
'pi' ist nicht einmal in Ihrer Klasse definiert – lmiguelvargasf
Sorry über den Tippfehler @lmiguelvargasf, ich habe den Beitrag bearbeitet –