Hallo erstmal
es würde SEHR dienlich sein, wenn du den Konstruktor (def __init__: und alles was dann in den Block kommt) immer nach GANZ VORNE gleich hinter
class ...:
schreibst, also
Code: Alles auswählen
class Class1():
def __init__(self,s1,s2):
self.s1 = s1
x = Class2(s2)
class Class2():
def __init__(self,s2):
self.s2 = s2
def addS1AndS2(self):
print self.s2 + Class1.s1
a = Class1('foo','bar')
a.x.addS1AndS2()
----------------------
die Zeile kannst du weglassen
---
die auch
---
die Zeile hat meiner Meinung nach nichts außerhalb des Konstruktors zu suchen
Das Löschen bzw Zuweisen eines Leerstrings ist unnötig, weil s1 und s2 Parameter sind, die dem Kunstruktor übergeben werden, wenn du eine Instanz erstellst. ( a ist eine Instanz der Klasse Class1 mit den Parametern, die du übergeben hast, sobald du schreibst
"" a = Class1(deine_Parameter) "" )
Wenn die INstanz erstellt wurde, also wenn der Konstruktor durchgelaufen ist, werden diese Parameter gelöscht. Wenn du nun aber in den Konstruktor schreibst "" self.s1 = s1 "", dann wird der Parameter erst in self.s1 abgespeichert, bevor er gelöscht wird, bleibt also unter dem neuen Namen erhalten. Da der alte Name nun weg ist, hat es keinen Sinn, für ihn einen Leerstring einzusetzen.
Ich hab das jetzt mal so geschrieben, in der Annahme, dass noch einige Python-Anfänger das lesen werden, ich habe das durch ein Buch gelernt, aber das ist häufig schwerer als durch ne Erklärung von jemandem, den man dann auch fragen kann ...
Auf jeden Fall weiß ich noch nicht, welches Problem du lösen willst. Was du geschrieben hast, ist ein Algorithmus und ein Algorithmus ist laut Definition eine Lösung für ein Problem. Das Beispiel find ich auch garnicht schräg, aber ich finds interessant
Bitte folgenden Text nur lesen, wenn jemand versuchen will, meine Gedankengänge zu verstehen, aber ich glaube die sind komplizierter, als das eigentliche Problem^^
Also soweit ich es verstanden habe, ist das Objekt x der Klasse Class1 selbst eine Instanz der klasse Class2
(puh is ja wirklich ein bissl verdreht^^)
und von der Instanz greifst du auf ebendiese zu (self) UND auf die Übergeordnete Instanz der Klasse Class1 ... und nimmst die Methode von a.x also eigentlich eine Methode, die einem Objekt von a(instanz Class1) gehört, aber die Methode ist aus Class2 ... aber Class1 hat nix von Class2 geerbt... aber das is ja nich das besondere...
(haben einzelne Posts ne Zeichenbegrenzung?
)
die Methode, die der Class2 gehört und, sagen wir mal, von Class1 indirekt geerbt wurde, greift sowohl auf Objekte der Class1 zu, als auch der Class2...
Ich komme zu folgendem Schluss bzw ich habe eine letzte Frage:
WOLLTEST du es auf zwei Klassen aufteilen? Denn es geht einfacher, viel einfacher
Code: Alles auswählen
class Class3():
def __init__(self, s1, s2):
self.s1 = s1
self.s2 = s2
def addS1AndS2(self):
print self.s2 + self.s1
a = Class3('foo','bar')
a.addS1AndS2()