Übergeordnete Klasse von Variablen in python
Ich versuche ein bisschen zu verstehen, wie Python (2.6) befasst sich mit Klassen, Instanzen und so weiter, und an einem bestimmten Punkt, ich habe versucht, diesen code:
#/usr/bin/python2.6
class Base(object):
default = "default value in base"
def __init__(self):
super(Base, self).__init__()
@classmethod
def showDefaultValue(cls, defl = default):
print "defl == %s" % (defl)
class Descend(Base):
default = "default value in descend"
def __init__(self):
super(Descend, self).__init__()
if __name__ == "__main__":
Descend.showDefaultValue()
Die Ausgabe ist: "default-Wert in der Basis"
Ich Frage mich, warum die "default" - Feld ist nicht overwirtten durch den Abstieg Klasse... gibt es eine Möglichkeit, diese zu überschreiben? Warum ist es nicht überschrieben wird?
Jeden Hinweis (oder link zu einer erklärenden Seite geschätzt wird). Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die class-variable überschrieben wird. Versuchen
Den Grund Ihrer Art nicht arbeiten, hat mehr zu tun mit der Art, wie Python behandelt default-Argumente an Funktionen als mit Klassen-Attribute. Der Standardwert für
defl
zur Zeit ausgewertet wird Python definiert, die verbindlich fürshowDefaultValue
- und dies geschieht genau einmal. Beim Aufruf der Methode, der default-Wert verwendet wird, was, gemessen an der Zeit der definition.In deinem Fall
defl
gebunden war, um den Wert derdefault
Variablen während der Ausführung der Klasse Körper formBase
. Unabhängig davon, wie Sie Sie nennenshowDefaultValue
später (D. H., ob überBase
oder überDescend
), der Wert bleibt fest in alle nachfolgenden Aufrufe vonshowDefaultValue
.bedeutet, dass
default
wird ausgewertet, wenn die Funktion definiert ist, wie üblich in Python. So die definition so Aussehen, dann:Dieser Wert
defl
gespeichert ist, als ein Standard-argument der function-Objekt und verwendet, wenn Sie die Methode aufrufen, ohne Argumente. Sie können sich an die Standardeinstellungen einer Funktion, wieprint Descend.showDefaultValue.im_self.default
, dies zu überprüfen.Wenn Sie möchten, um die Standard-von der aktuellen Klasse, dann haben Sie es bekommen, die es gibt: