initialisieren Sie ein Objekt mit self.__init__(...)
Könnte jemand erklären, ob es sicher ist, initialisieren Sie ein Objekt durch Aufruf von "self.init(". wie das folgende vereinfachte Beispiel?
Den Grund ich Frage ist, dass ich konnte nicht finden, dass diese Methode weder in mehreren python-Büchern noch im internet. Es gibt einige, die vorschlagen, um eine Liste aller Attribute und legen Sie Sie auf den Anfangswert eins nach dem anderen. Im Grunde möchte ich mein Objekt in den ursprünglichen Zustand nach Beendigung einiger Aufgaben.
class Book(object):
def __init__(self,name,author):
self.name = name
self.author = author
self.copies = 5
def reset(self):
self.__init__(self.name,self.author)
def incrementCopy(self):
self.copies += 1
Kite = Book('kite runner','khaled hosseini')
print 'initial number of copies:', Kite.copies
Kite.incrementCopy()
Kite.incrementCopy()
Kite.incrementCopy()
print '3 copies are added:', Kite.copies
Kite.reset()
print 'number of copies are reinitialized', Kite.copies
initial number of copies: 5
3 copies are added: 8
number of copies are reinitialized 5
Warum kann man nicht tun, dass in
selbst.name und self.Autor nicht geändert werden, Sie können ignoriert werden, in diesem Beispiel. Meine Frage ist über self.__init__ Teil. Ich habe nicht ganz verstanden deine Frage. Was meinst du mit "das"?
reset
Funktion selbst, nachdem Sie haben, um die ursprünglichen Werte wieder? self.name
und self.author
greift auf den aktuellen Wert, nicht die ersten.selbst.name und self.Autor nicht geändert werden, Sie können ignoriert werden, in diesem Beispiel. Meine Frage ist über self.__init__ Teil. Ich habe nicht ganz verstanden deine Frage. Was meinst du mit "das"?
InformationsquelleAutor | 2012-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das einzige, was das Besondere an
__init__
ist, dass es automatisch aufgerufen, wenn eine Instanz erstellt wird. Andere als dass es eine normale Methode, und es ist sicherer, es zu benutzen, um Ihr Objekt wieder in seinen ursprünglichen Zustand.Dass gesagt wird, nur weil es sicher ist, bedeutet nicht, es ist eine gute Idee. Andere Menschen suchen bei Ihr code könnte verwirrt werden, und es ist nicht schwer zu tun, alles in einem
reset
- Methode (die__init__
können selbst nennen) werden noch deutlicher, wie die Methode verwendet wird.InformationsquelleAutor Andrew Clark
Ich hielte es für eine sehr schlechte Praxis - Sie sollten nicht
__init__
manuell (es sei denn, Berufung__init__
von der übergeordneten Klasse). Auch, vorbei Objekt die Daten zurück zu__init__
ist etwas seltsam.Warum nicht so etwas wie dieses:
Einzige problem mit diesem ist, ich bekomm code lint-Warnungen: "Instanz-Attribut kopiert definiert, die außerhalb von init"
ja, empfohlene Weg zu sein scheint, zu erstellen, die alle Attribute in
__init__
, offen gesagt das sprechen, ich bevorzuge es zu ignorieren und Doppelarbeit zu vermeiden.InformationsquelleAutor Code Painters
Ich cosider ist nicht unsicher, ich habe es verwendet und nichts seltsames passiert, in der Erinnerung, sondern berücksichtigen, dass die Attribute definiert, die in anderen Methoden nicht zurückgesetzt werden. Beispiel:
Dann nur nicht vergessen zu definieren, die jedes Objekt in der init Funktion. Sie könnte erwägen, die schlechte Praxis aus diesem Grund, aber ich denke immer noch elegant.
InformationsquelleAutor user10369452