Verfasst: Montag 7. Juli 2008, 15:32
Folgendes scheint zu funktionieren:
Natürlich ist das IMHO keineswegs zufriedenstellend, da wir bei jeder Klasse raten/testen/nachforschen müssen, ob deepcopy nun funktioniert oder nicht. Aber vielleicht können wir voraussetzen, dass derlei Undinge nur bei Numeric oder NumPy geschehen.
Bei NumPy selber konnte ich nichts melden, das ist eine 99% geschlossene Gesellschaft, da kommen nur Hacker oder Insider durch (bitte als Lob für dieses Python-Forum auslegen).
Code: Alles auswählen
#!/usr/bin/python
import numpy as n #Arrays
from copy import deepcopy
class Datenblatt(object):
def __init__(self,zeilen,spalten):
self.hintergrund = n.ones((zeilen+2,spalten))
#
self.zeilen = zeilen
self.matrix = self.hintergrund[:zeilen,:]
self.zusatz = self.hintergrund[zeilen:zeilen+2,:]
def __deepcopy__(self,memo):
_kopie = deepcopy(super(Datenblatt,self),memo)
_kopie.matrix = _kopie.hintergrund[:_kopie.zeilen,:]
_kopie.zusatz = _kopie.hintergrund[_kopie.zeilen:_kopie.zeilen+2,:]
return _kopie
def bearbeite(self):
self.hintergrund *= -1
def zeige(self):
print "\n\nStand der Gesamtdaten:"
print '\n', self.hintergrund
print '\n\n', self.matrix, '\n\n', self.zusatz
muster = Datenblatt(zeilen=4,spalten=8)
#
#blatt = muster #funktioniert
blatt = deepcopy(muster) #funktioniert jetzt auch, aber nur wegen __deepcopy__
blatt.zeige()
#
blatt.matrix[1,1] = -2
blatt.zusatz *= 2
blatt.matrix += 5
blatt.zeige()
#
blatt.bearbeite()
blatt.zeige()
Bei NumPy selber konnte ich nichts melden, das ist eine 99% geschlossene Gesellschaft, da kommen nur Hacker oder Insider durch (bitte als Lob für dieses Python-Forum auslegen).