Hallo,
es wird keine falsche Methode aufgerufen.
in der Klasse1 gibt es eine Methode setRecords.
Bei dieser Methode kommen die richtigen Datensätze an.
sobald das 2. Objekt diese Methode aufruft und Datensätze übergibt, werden dadurch die Datensätze des ersten Objekts überschrieben.
das Beispiel (ist jetzt nicht das sauberste
) zeigt es
Code: Alles auswählen
#!/usr/bin/env python
# Rückgabewert:
#{'new': {1: 2, 2: 3}, 'old': {1: 2, 2: 3}}
#{'new': {1: 2, 2: 3}, 'old': {1: 2, 2: 3}}
class Klasse0(object):
def __init__(self):
pass
class Klasse1(Klasse0):
TEST1 = 'old'
TEST2 = 'new'
__records = {}
abc = None
def __init__(self, abc):
self.abc = abc
Klasse0.__init__(self)
def getRecords(self):
return self.__records
def setRecords(self, mode, records):
self.__records[mode] = records
class Klasse2(Klasse1):
pass
class Klasse3(Klasse2):
xyz = None
def __init__(self):
self.xyz = Klasse5()
Klasse1.__init__(self, 1)
def _getRecords(self):
return {1: 2, 2: 3}
def test(self):
return self.xyz.getRecords()
def setRecords(self, mode):
self.xyz.setRecords(mode)
Klasse1.setRecords(self, mode, self._getRecords()) # <--- warum überschreibt diese Zeile die Records von der vorherigen zeile?
class Klasse4(Klasse2):
def _getRecords(self):
return {2: 3, 3: 4}
class Klasse5(Klasse4):
def __init__(self):
Klasse0.__init__(self)
Klasse1.__init__(self, 2)
def setRecords(self, mode):
Klasse1.setRecords(self, mode, self._getRecords())
if __name__ == '__main__':
klasse3 = Klasse3()
klasse3.setRecords(klasse3.TEST1)
klasse3.setRecords(klasse3.TEST2)
print klasse3.getRecords()
print klasse3.test()
Code: Alles auswählen
#!/usr/bin/env python
# Rückgabewert:
#{1: 2, 2: 3}
#{2: 3, 3: 4}
class Klasse0(object):
def __init__(self):
pass
class Klasse1(Klasse0):
__records = {}
abc = None
def __init__(self, abc):
self.abc = abc
Klasse0.__init__(self)
def getRecords(self):
return self.__records
def setRecords(self, records):
self.__records = records
class Klasse2(Klasse1):
pass
class Klasse3(Klasse2):
xyz = None
def __init__(self):
self.xyz = Klasse5()
Klasse1.__init__(self, 1)
def _getRecords(self):
return {1: 2, 2: 3}
def test(self):
return self.xyz.getRecords()
def setRecords(self):
self.xyz.setRecords()
Klasse1.setRecords(self, self._getRecords())
class Klasse4(Klasse2):
def _getRecords(self):
return {2: 3, 3: 4}
class Klasse5(Klasse4):
def __init__(self):
Klasse0.__init__(self)
Klasse1.__init__(self, 2)
def setRecords(self):
Klasse1.setRecords(self, self._getRecords())
if __name__ == '__main__':
klasse3 = Klasse3()
klasse3.setRecords()
print klasse3.getRecords()
print klasse3.test()
warum wird beim erasten Beispiel nicht folgendes zurückgegeben?
{'new': {1: 2, 2: 3}, 'old': {1: 2, 2: 3}}
{'new': {2: 3, 3: 4}, 'old': {2: 3, 3: 4}}
liegt es evtl. daran, dass __records im ersten Beispiel ein Dictionary ist?
mfg
Twilo