Hallo,
in den Quellen, die ich bisher nachgeschlagen habe, wird gesagt, dass beim Aufruf von __init__() in einer Klasse bereits ein Objekt erzeugt worden ist:
"(...) the object has already been constructed by the time __init__ is called, and you already have a valid reference to the new instance of the class."
(< http://diveintopython.org/object_oriented_framework/defining_classes.html#d0e11720>)
oder auch:
"The instantiation operation (``calling'' a class object) creates an empty object. Many classes like to create objects with instances customized to a specific initial state. Therefore a class may define a special method named __init__() ..."
(http://www.python.org/doc/current/tut/node11.html#SECTION0011320000000000000000)
wo zumindest gesagt wird, dass das Objekt mit der Instanziierung erzeugt wird und nicht mit der Methode __init__(). Diese wiederum sorgt nur für den gewünschten Anfangszustand.
Wenn nun also ein Objekt schon vor dem Aufruf der __init__()-Methode existiert, dann würde ich bei folgendem Programm:
---
class foo:
def __init__(self):
raise RuntimeError, 'Something went wrong'
def do_something(self):
print 'If you see this sentence, then an object was actually created.'
try:
foo_object = foo()
except RuntimeError, strerror:
print strerror
foo_object.do_something()
---
diese Ausgabe erwarten:
Something went wrong
If you see this sentence, then an object was actually created.
Stattdessen kommt aber:
Something went wrong
Traceback (most recent call last):
File "foo.py", line 12, in <module>
foo_object.do_something()
NameError: name 'foo_object' is not defined
Wie kommt das?
Viele Grüße
cookie